答案 0 :(得分:108)
总结:
messaging:contact_form
读取npm install
创建依赖项列表,并使用package.json
告知要安装这些依赖项的版本。 如果依赖项不在package-lock.json
中,它将由package-lock.json
添加。
npm install
(以 C 不连续的 I integration命名)直接从npm ci
安装依赖项并使用{{ 1}}仅用于验证没有不匹配的版本。 如果缺少任何依赖项或版本不兼容,则会抛出错误。
使用package-lock.json
添加新的依赖关系,并更新对项目的依赖关系。通常,在拉动更新依赖项列表的更改之后,您将在开发期间使用它,但是在这种情况下使用package.json
是个好主意。
如果需要确定的,可重复的构建,请使用npm install
。例如,在持续集成,自动化作业等过程中以及首次安装依赖项时,而不是npm ci
。
npm install
npm ci
和npm install
驱动(依此顺序)。npm-shrinkwrap.json
中安装所有缺少的依赖项。package-lock.json
或node_modules
。
package.json
一起使用时,它可以写入package-lock.json
以添加或更新依赖项。npm i packagename
),它可能会写入package.json
来锁定某些依赖项的版本(如果该文件中尚未存在这些依赖项的话)。npm ci
npm i
或package-lock.json
出现。package-lock.json
,则会引发错误。npm-shrinkwrap.json
并立即安装所有依赖项。package.json
或node_modules
。 package.json
从package-lock.json
或npm ci
生成整个依赖关系树时,package-lock.json
使用以下命令更新npm-shrinkwrap.json
的内容以下算法:
npm install
答案 1 :(得分:8)
Npm ci将删除任何现有的node_modules文件夹,并依赖package.lock文件安装每个软件包的特定版本。它比npm install快得多,因为它跳过了某些功能。干净的状态安装非常适合ci / cd管道和docker构建!您还可以使用它一次安装所有内容,而不是特定的软件包。
答案 2 :(得分:4)
您链接的文档具有摘要:
简而言之,使用npm install和npm ci之间的主要区别是:
- 项目必须具有现有的package-lock.json或npm-shrinkwrap.json。
- 如果程序包锁定中的依赖项与package.json中的依赖项不匹配,则npm ci将退出并显示错误,而不是更新程序包锁定。
- npm ci一次只能安装整个项目:此命令无法添加单个依赖项。
- 如果node_modules已经存在,它将在npm ci开始安装之前自动删除。
- 它永远不会写入package.json或任何包锁:安装实际上是冻结的。
答案 3 :(得分:2)
您应该在不同的情况下使用它们。
npm install
非常适合开发和要在CI中缓存node_modules
目录时使用。
什么时候使用?如果您要打包供其他人使用(在此发行版中不包含node_modules
),则可以执行此操作。关于缓存,请小心,如果您计划支持Node.js
的不同版本,请记住由于node_modules
运行时要求之间的差异,可能必须重新安装Node.js
。如果您希望使用一个版本,请使用最新的LTS
。
npm ci
,因为使安装尽可能具有确定性非常重要。安装将花费更长的时间,但最终将使您的应用程序更可靠(在此版本中确实包含node_modules
)。坚持使用LTS
的{{1}}版本。
奖金:您可以根据想要制作的复杂程度来混合它们。在Node.js
中的功能分支上,您可以缓存git
以提高团队的工作效率,并可以根据合并请求和主分支依靠node_modules
来获得确定的结果。
答案 4 :(得分:1)
这些命令在功能上非常相似,但是区别在于安装package.json
和package-lock.json
文件中指定的依赖项所采用的方法。
npm ci
对应用程序的所有依赖项执行全新安装,而npm install
可能会跳过某些已安装在系统上的安装。如果系统上已经安装的版本不是您的package.json
打算安装的版本,即安装的版本与“ 必需的”版本不同,则可能会出现问题。
其他区别是npm ci
永远不会触摸您的package*.json
文件。如果package.json
和package-lock.json
文件中的依赖项版本不匹配,它将停止安装并显示错误。
您可以从官方文档here中阅读更好的解释。
此外,您可能想了解有关软件包锁here的信息。
答案 5 :(得分:1)
值得记住的是,像alpine这样的轻型节点docker映像未安装Python,这是node-gyp
使用的npm ci
的依赖项。
我认为,为了使npm ci
正常运行,您需要在构建中安装Python作为依赖项。