最近又有点记忆模糊这一块的区别了,就重新学习一下,相关的知识点
dependencies / devDependencies
-save // 会把依赖包名称添加到package.json文件dependencies下
-save-dev // 则添加到package.json文件devDependencies下
-S // 就是--save的简写
-D // 就是--save-dev
package.json中的版本管理
当我们查看package.json中dependencies/devDependencies的时候,会发现他们的版本号之前都会加一个符号,有的是插入符号^,有的是波浪符号~。
波浪符号(~):
它会更新到当前minor version(也就是中间的那位数字)中最新的版本。比如当我们引入"vue": "~2.6.11", 会去匹配更新到2.6.x的最新版本,如果出了一个新的版本为2.7.0,则不会自动升级。波浪符号是曾经npm安装时候的默认符号,现在已经变为了插入符号。
插入符号(^)
它会把当前库的版本更新到当前major version(也就是第一位数字)中最新的版本。比如当我们引入"vue": "^2.6.11", 会去匹配更新到2.x.x的最新版本,但是他不会自动更新到3.0.0。
package-lock.json
package-lock.json 是在 npm install时候生成一份文件,用来记录当前状态下实际安装的各个npm package的具体来源和版本号。 (需要npm包是5.x以上版本)
该文件里面记录了package.json依赖的模块,以及依赖的依赖。并且给每个依赖标明了版本, 获取地址和哈希值, 使得每次安装都会出现相同的结果. 不管你在什么机器上面或什么时候安装。
当我们下次再npm install时候,npm发现如果项目中有package-lock.json文件,会根据package-lock.json里的内容来处理和安装依赖而不再根据package.json.
当再次更新package.json某个模块版本,(包括手动更改package.json某个依赖模块的某个版本号,然后重新npm install或者类似npm install vue@2.6.11来更新某个模块)package-lock.json也会自动跟着更新,所以不用担心package.json更新了,package-lock.json还是旧的问题。
cnpm是不支持package-lock.json的
使用cnpm install时候,并不会生成package-lock.json文件。
cnpm install的时候,就算你项目中有package-lock.json文件,cnpm也不会识别,仍会根据package.json来安装。
所以这就是为什么之前你用npm安装产生了package-lock.json,后面的人用cnpm来安装,可能会跟你安装的依赖包不一致,这是因为cnpm 不受package-lock.json影响,只会根据package.json进行下载。