npm

文章目录

npm

npm 是包管理工具

npm config list 可以查看 npm 配置。

比如有一个 registry 属性,标识C盘用户目录下 .npmrc 里有一个 registry 属性,可以用于配置 npm 源

全局安装

全局安装的意思很简单,就是安装的模块会被安装到全局下。是只能在命令行中使用的包。

npm root -g 可以查看 npm -g 的全局安装目录,比如 npm i http-server -g,如果已经安装过一次,会报错说本地已存在,需要覆盖的话加上 –force,npm i http-server -g --force

为什么 npm -g 的包可以全局使用,举个例子 npm i http-server -g

其实只是在 **/user/local/bin (C:\User\test1\AppData\Roaming\npm\hs 和C:\User\test1\AppData\Roaming\npm\http-server)目录下作了个链接到 /usr/local/lib/node_modules/http-server/bin/http-server (C:\User\test1\AppData\Roaming\npm\node_modules\http-server\bin\http-server)这个文件,当我们执行 http-server 或 hs 这个命令时,会去找目录下的 .cmd 文件,之后 .cmd 会调用这个链接的文件,而这个文件的开头,会标识出这个文件是用什么来执行的(#!/usr/bin/env node 表示用环境变量里的 node 来执行这个文件,前面是固定的,不管是 mac 还是 windows,如果不标识,将会当作 txt 文件打开。)

如果能直接在命令行里输入 hs 后能够执行命令,可以发现系统或用户的环境变量 PATH 里会有 C:\User\test1\AppData\Roaming\npm 这样的路径,cmd 里直接输入 path,可以查看所有的环境变量。

npm init

包的初始化,生成一个 package.json 文件,值得一提的是,”main”: “xxx.js” 字段是 node 会默认调用的文件,webpack 默认会调用 “module” (es6 模块用)

临时指令,在开发时,可以将我们的包临时放到全局下,方便调试。后续可以将包发到 npm 上,通过 -g 下载。仅仅能在命令行中使用,做一些工具。

在我们为 package.json 加入 “bin”: “xxx.js” 的属性后,可以使用 npm link 将当前目录做一个软链到 C:\User\test1\AppData\Roaming\npm ,然后就会在这个目录下新建一个当前 package,json 里 name 属性一样名字(比如 dl)的 .cmd 文件,指向 C:\User\test1\AppData\Roaming\npm\node_modules\dl\xxx.js,而这个 C:\User\test1\AppData\Roaming\npm\node_modules\dl 是当前项目目录的一份拷贝(C:\User\test1\AppData\Roaming\npm\node_modules\dl 会指向当前目录),每次修改了当前目录的文件之后,如果想要更新全局指令,需要重新 npm link,当然这时候会出现重复,需要 –force。

最后结果是 C:\User\test1\AppData\Roaming\npm\dl(这是一个文件) 指向 C:\User\test1\AppData\Roaming\npm\node_modules\dl\xxx.js ,接着 C:\User\test1\AppData\Roaming\npm\node_modules\dl 指向当前项目目录。

bin 属性如果想写多个,可以写成对象形式

1
2
3
4
5
6
{
"bin": {
"dl": "./xxx.js",
"dl-module": "./xxx.js"
}
}

依赖

devDependencies 开发依赖

dependencies 项目依赖

peerDepencies 同版本依赖,

optionsalDependencies(很少用,表示可选包,下不下都行。。好像没啥用)

bundleDependencies(npm pack 压缩成 .tgz 时用的,会把这里的包一起打包进去)

npm 安装包

npm i xxx -D 开发依赖,仅在开发时使用,比如 gulp(打包 css),安装到”devDependencies”。

npm i xxx -S 项目依赖,开发上线都需要,比如 react、vue,安装到 “dependencies”。

npm 特点是会将包拍平,当我们安装了 a 和 b 两个包,a 中依赖了 c 包,b 中也依赖了 c 包,此时由于 npm 已经把包拍平,所以会共用同一个 c 包,只安装一次。但是,如果 a 包和 b 包中的 c 包版本不同,就不会拍平了,就都会安装各自模块目录里去。

比如,当前项目下使用 -S 安装了 jquery,又在 package.json 的 “peerDependencies” 中有 “bootstrap”: “^3.0.0” 属性。

由于 jq 也依赖 bootstrap,在 npm i 的时候,很有可能会出现警告

1
npm WRAN [email protected] requires a peer of bootstrap@^3.0.0 but none is installed. You must install peer dependencies youerself.

就表示需要一个 3.0.0 的依赖,但是没装,可能会出现问题。

npm pack

会用当前目录打出一个 .tgz 的包,可以上传到服务器上

分享到:

评论完整模式加载中...如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理