NPM是Node.js默认的包管理工具,工作中常使用npm i 来安装和更新依赖。
但是在NPM v6版本后,新增了命令npm ci 用于安装依赖。
npm i 和npm ci区别:
npm i
npm i 将安装所有 package.json 中的依赖。如果使用 ^ 或 ~ 标识依赖的版本,npm i 将精准安装所标识的版本。npm i 会更新 package-lock.json文件。适用场景是安装新依赖或者升级已有依赖。
npm ci
npm ci 将删除 node_modules 文件夹以确保干净的环境。npm ci 会依照 package-lock.json 里的依赖版本精准安装。npm ci
强依赖于 package-lock.json,如果 package-lock.json 不存在,npm ci 将不会工作。
适用场景
在CI/CD场景中使用 npm ci 更为合适,一方面,由于npm ci 依赖于 package-lock.json ,依赖版本确保一致,不会出现线上版本和开发版本不一致而引发的问题;另一方面,首次安装时,使用 npm ci 将比npm i 更加迅速,原因是由于package-lock.json 的存在,不需要做依赖的版本检查以及梳理各依赖之间的关系。
实际使用的区别点主要如下(windows下):
1. 用npm i安装的模块无法用npm uninstall删除,用npm uninstall i才卸载掉
2. npm i会帮助检测与当前node版本最匹配的npm包版本号,并匹配出来相互依赖的npm包应该提升的版本号
3. 部分npm包在当前node版本下无法使用,必须使用建议版本
4. 安装报错时intall肯定会出现npm-debug.log 文件,npm i不一定