NPM依赖包版本号~和^和*的区别:
~ 会匹配最近的小版本依赖包,比如~1.2.3会匹配所有1.2.x版本,但是不包括1.3.0
^ 会匹配最新的大版本依赖包,比如^1.2.3会匹配所有1.x.x的包,包括1.3.0,但是不包括2.0.0
- 这意味着安装最新版本的依赖包
推荐使用~,只会修复版本的bug,比较稳定
包与模块:有package.json文件的文件/目录就可以是一个包
元数据:描述自身的数据
package.json文件中name与version为必需
2018 年了,你还是只会 npm install 吗?
淘宝npm镜像使用方法
1.临时使用
npm --registry https://registry.npm.taobao.org install express
2.持久使用
npm config set registry https://registry.npm.taobao.org
使用npm踩过的坑
Windows下的Nodejs npm路径是Users下appdata,修改路径方法为
prefix = D:\nodejs\node_global
cache = D:\nodejs\node_global
我们在使用 npm install 安装模块的模块的时候 ,一般会使用下面这几种命令形式:
npm install moduleName # 安装模块到项目目录下
npm install -g moduleName # -g 的意思是将模块安装到全局,具体安装到磁盘哪个位置,要看 npm config prefix 的位置。
npm install -save moduleName # -save 的意思是将模块安装到项目目录下,并在package文件的dependencies节点写入依赖。
npm install -save-dev moduleName # -save-dev 的意思是将模块安装到项目目录下,并在package文件的devDependencies节点写入依赖。
那么问题来了,在项目中我们应该使用四个命令中的哪个呢?这个就要视情况而定了。下面对这四个命令进行对比,看完后你就不再这么问了。
npm install moduleName 命令
- 安装模块到项目node_modules目录下。
- 不会将模块依赖写入devDependencies或dependencies 节点。
- 运行 npm install 初始化项目时不会下载模块。
- npm install -g moduleName 命令
全局安装后可以作为命令行工具使用
- 安装模块到全局,不会在项目node_modules目录中保存模块包。
- 不会将模块依赖写入devDependencies或dependencies 节点。
- 运行 npm install 初始化项目时不会下载模块。
- npm install -save moduleName 命令
npm5以上可以不加,默认
- 安装模块到项目node_modules目录下。
- 会将模块依赖写入dependencies 节点。
- 运行 npm install 初始化项目时,会将模块下载到项目目录下。
- 运行npm install --production或者注明NODE_ENV变量值为production时,会自动下载模块到node_modules目录中。
- npm install -save-dev moduleName 命令或 -D
- 安装模块到项目node_modules目录下。
- 会将模块依赖写入devDependencies 节点。
- 运行 npm install 初始化项目时,会将模块下载到项目目录下。
- 运行npm install --production或者注明NODE_ENV变量值为production时,不会自动下载模块到node_modules目录中。
总结
devDependencies 节点下的模块是我们在开发时需要用的,比如项目中使用的 gulp ,压缩css、js的模块。这些模块在我们的项目部署后是不需要的,所以我们可以使用 -save-dev 的形式安装。像 express 这些模块是项目运行必备的,应该安装在 dependencies 节点下,所以我们应该使用 -save 的形式安装。
npm install packagename 0.0.1
安装指定版本的模块
npm init
这个命令会在当前目录生成一个package.json文件,这个文件中会记录一些关于项目的信息,比如:项目的作者,git地址,入口文件、命令设置、项目名称和版本号等等,一般情况下这个文件是必须要有的,方便后续的项目添加和其他开发人员的使用。
npm install packagename --save 或 -S
--save、-S参数意思是把模块的版本信息保存到dependencies(生产环境依赖)中,即你的package.json文件的dependencies字段中;
npm install packagename --save-dev 或 -D
--save-dev 、 -D参数意思是把模块版本信息保存到devDependencies(开发环境依赖)中,即你的package.json文件的devDependencies字段中;
npm install packagename --save-optional 或 -O
--save-optional 、 -O参数意思是把模块安装到optionalDependencies(可选环境依赖)中,即你的package.json文件的optionalDependencies字段中。
npm install packagename --save-exact 或 -E
--save-exact 、 -E参数的意思是精确的安装指定版本的模块,细心的同学会发现dependencies字段里每个模块版本号前面的^不见鸟。。。
如果你打开的是别人的项目,这个时候一般是没有任何依赖包的,但是所有需要的包已在package.json里面写好了,这个时候我们就可以使用npm install来安装所有项目中需要的依赖包了
npm install packagename -g 或 --global
安装全局的模块(不加参数的时候默认安装本地模块)
npm list 或 npm ll 或 npm la 或 npm ls
查看所有已经安装的模块 ll 、 ls 、 la 三个命令意思都一样 但是列表的展示方式不一样 喜欢用哪个就看个人喜好了,不懂的同学可以每个都去试下。
npm uninstall packagename [options]
卸载已经安装的模块,后面的options参数意思与安装时候的意思一样,与这个命令相同的还有npm remove 、npm rm、npm r 、 npm un 、 npm unlink 这几个命令功能和npm uninstall基本一样,个人觉得没什么区别。
npm outdated
这个命令会列出所有已经过时了的模块,对于已经过时了的模块可以使用下面的命令去更新
npm update [-g]
更新已经安装的模块(或全局的模块)
npm help '命令'
查看某条命令的详细帮助
npm root
查看命令的绝对路径
npm config
设置npm命令的配置路径,这个命令一般用于设置代理,毕竟大部分都是国外的模块,不过个人还是比较喜欢用cnpm 这个命令是用的淘宝的镜像,用法与npm一样,速度还可以。
除去以上的这些命令外,经常还能见到一些npm start、npm deploy、 npm build等等之类的命令,这些一般都是在package.json 中自定义的一些启动、重启、停止服务之类的命令。可以在package.json文件的scripts字段里自定义。例如:
"scripts": {
"test": "echo "Error: no test specified" && exit 1",
"build": "webpack",
"start": "webpack-dev-server main.js,
"deploy": "set NODE_ENV=production"
}
npm缓存命令
npm cache 提供了三个命令,分别是npm cache add
, npm cache clean
, npm cache verify
。
npm cache add
官方解释说这个命令主要是 npm 内部使用,但是也可以用来手动给一个指定的 package 添加缓存。(This command is primarily intended to be used internally by npm, but it can provide a way to add data to the local installation cache explicitly.)
npm cache clean
删除缓存目录下的所有数据。从 npm@5 开始,为了保证缓存数据的有效性和完整性,需要加上 --force
参数。
npm cache verify
验证缓存数据的有效性和完整性,清理垃圾数据。
npm 的缓存是使用 pacote 模块进行下载和管理,基于 cacache 缓存存储。由于 npm 会维护缓存数据的完整性,一旦数据发生错误,就回重新获取。因此不推荐手动清理缓存,除非需要释放磁盘空间,这也是要强制加上 --force
参数的原因
npm离线安装
npm 提供了离线安装模式,使用 --offline, --prefer-offline, --prefer-online 可以指定离线模式。
--prefer-offline / --prefer-online
“离线优先/网络优先”模式。
如果设置为--prefer-offline
则优先使用缓存数据,如果没有匹配的缓存数据,则从远程仓库下载。
如果设置为--prefer-online
则优先使用网络数据,忽略缓存数据,这种模式可以及时获取最新的模块。
--offline
完全离线模式,安装过程不需要网络,直接使用匹配的缓存数据,一旦缓存数据不存在,则安装失败。
yarn global
不像 npm , 全局操作在使用 -g 或者 --global 标志的命令的时候执行,Yarn 命令需要带有 global 前缀。跟 npm 一样,特定项目的依赖不需要全局安装。
global 前缀只对 yarn add, yarn bin,yarn ls 和 yara remove 有效。除了 yarn add,这些命令跟 npm 的是等价的。
yarn缓存命令
yarn cache 提供了三个命令,分别是yarn cache ls
, yarn cache dir
, yarn cache clean
。
yarn cache ls
列出当前缓存的包列表。
yarn cache dir
显示缓存数据的目录。
yarn cache clean
清除所有缓存数据。