npm包管理原理
当你使用npm安装一个包(并保存它)或者更新一个包的时候,package.json
里就自动添加了一条信息,包括包名和其版本。npm默认安装最新版本,然后在其版本号之前添加一个符号。比如1.2.12,它表明最低应使用1.2.12版本。并且在这之上,拥有相同大版本号的任何版本都是OK的。毕竟小版本和bugfix版本不会对使用造成任何影响,所以用任何相同大版本的更高级版本都很安全。
- 符号
^
:表示主版本固定的情况下,可更新最新版。例如:vuex: "^3.1.3",3.1.3及其以上的3.x.x都是满足的。 - 符号
~
:表示次版本固定的情况下,可更新最新版。如:vuex: "~3.1.3",3.1.3及其以上的3.1.x都是满足的。 - 无符号:无符号表示固定版本号,例如:vuex: "3.1.3",此时一定是安装3.1.3版本。
举例:
"^1.2.3": 大于等于 1.2.3 且小于 2.0.0版本
"^0.3.4": 大于等于 0.3.4 且小于 0.4.0版本
"^0.0.6": 大于等于 0.0.6 且小于 0.0.7版本
不同的环境下生成相同的node_modules
如果只有一个package.json
文件,运行npm i会根据它生成一个package-lock.json
文件,这个文件相当于本次install的一个快照,它不仅记录了package.json
指明的直接依赖的版本,也记录了间接依赖的版本。
如果package.json
的semver-range version和package-lock.json
中版本兼容(package-lock.json
版本在package.json
指定的版本范围内),即使此时package.json
中有新的版本,执行npm i也还是会根据package-lock.json
下载
yarn同理。
但是cnpm是不会读取package-lock.json这个文件的,也不会生成package-lock.json这个文件,所以,cnpm是不支持依赖版本锁定的。
大概有这么几条方案:
package.json
中固定版本npm
+package-lock.json
npm
+npm-shrinkwrap.json
yarn
+yarn-lock.json
关于切换npm源
手动更换npm源
-
设置npm源:
npm config set registry [url]
-
查看确认:
npm config get registry
使用nrm
-
安装nrm:
npm i nrm -g
-
查看可选的源:
nrm ls
-
切换到某个源:
nrm use xx
-
例如切换到淘宝源:
nrm use taobao
-
增加源(添加企业内部的私有源或者其他源):
nrm add [registryName] [url]
-
删除源:
nrm del <registryName>
-
测试某个源的相应时间:
nrm test taobao