当前位置: 首页 > 知识库问答 >
问题:

“NPM安装”和“NPM CI”有什么区别?

时向文
2023-03-14

我正在使用持续集成,并发现了npm ci命令。

我不知道对我的工作流使用此命令有什么好处。

更快吗?这会让考试变得更难吗,好吗,然后呢?

共有1个答案

田彬郁
2023-03-14

来自国家预防机制文件:

简而言之,使用npm安装和npm ci之间的主要区别是:

  • 项目必须有一个现有的包-lock.json或npm-shrinkwrap.json.
  • 如果包锁中的依赖项与package.json中的依赖项不匹配,npm ci将以错误退出,而不是更新包锁。
  • NPM ci一次只能安装整个项目:不能使用此命令添加单个依赖项。
  • 如果node_modules已经存在,则在npm ci开始安装之前将自动删除它。
  • 它永远不会写入package.json或任何包锁:安装基本上是冻结的。

使用NPM安装添加新的依赖项,并更新项目上的依赖项。通常,在开发过程中,在提取更新依赖项列表的更改后使用它,但在这种情况下,使用NPM CI可能是个好主意。

如果需要确定性的、可重复的构建,请使用NPM CI。例如,在持续集成、自动化作业等过程中,以及第一次安装依赖项时,而不是NPM安装

  • 安装包及其所有依赖项。
  • 依赖关系由npm-shrinkwrap.jsonpackage-lock.json(按此顺序)驱动。
  • 不带参数:安装本地模块的依赖项。
  • 可以安装全局包。
  • 将在node_modules中安装任何缺少的依赖项。
  • 它可以写入package.jsonpackage-lock.json
    • 当与参数(npm i packagename)一起使用时,它可能会写入package.json以添加或更新依赖项。
    • 在不带参数的情况下使用,(npm i)它可能会写入package-lock.json以锁定某些依赖项的版本,如果这些依赖项还不在此文件中的话。
    • 至少需要npm v5.7.1。
    • 需要package-lock.jsonnpm-shrinkwrap.json
    • 如果来自这两个文件的依赖项不匹配package.json.
    • 将引发错误
    • 删除node_modules并立即安装所有依赖项。
    • 它从不写入package.jsonpackage-lock.json.

    NPM CIpackage-lock.jsonnpm-shrinkwrap.json生成整个依赖项树时,NPM install使用以下算法更新node_modules的内容(源代码):

    load the existing node_modules tree from disk
    clone the tree
    fetch the package.json and assorted metadata and add it to the clone
    walk the clone and add any missing dependencies
      dependencies will be added as close to the top as is possible
      without breaking any other modules
    compare the original tree with the cloned tree and make a list of
    actions to take to convert one to the other
    execute all of the actions, deepest first
      kinds of actions are install, update, remove and move
    

 类似资料:
  • 问题内容: 和之间的实际区别是什么?我什么时候应该使用哪个? 问题答案: 在 package.json中* 指定的软件包版本的npm install 和npm update 处理之间的区别: * 摘要 :唯一的不同是 已经安装的带有模糊版本控制的模块 … 被忽略 得到更新 另外 :和默认手柄devDependencies不同 除非添加标志,否则将 安装/更新 devDependencies 除非添

  • 本文向大家介绍npm i和npm install有什么区别?相关面试题,主要包含被问及npm i和npm install有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 用npm i安装的模块无法用npm uninstall删除,用npm uninstall i才卸载掉 npm i会帮助检测与当前node版本最匹配的npm包版本号,并匹配出来相互依赖的npm包应该提升的版本号 部分npm包在

  • 问题内容: 和之间的根本区别是什么?只需要简单明了的东西。我已经看到一些同事在他们的项目中使用和互换使用。 问题答案: 所有程序包管理器都有许多缺点。您只需要选择可以与之共存的地方即可。 History npm开始管理node.js模块(这就是默认情况下会放入软件包的原因),但是当与Browserify或webpack结合使用时,它也适用于前端。 Bower是专门为前端创建的,因此考虑到了优化。

  • 本文向大家介绍yarn和npm有什么区别?相关面试题,主要包含被问及yarn和npm有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 速度快 。速度快主要来自以下两个方面: 并行安装:无论 npm 还是 Yarn 在执行包的安装时,都会执行一系列任务。npm 是按照队列执行每个 package,也就是说必须要等到当前 package 安装完成之后,才能继续后面的安装。而 Yarn 是同步执行

  • 问题内容: 和之间有什么区别? 我在项目中注意到,有时npm在执行时会开始失败,但是在运行时,它可以正常工作。 如何这两个目标的内部运作,即与不同? 问题答案: 将依赖项安装到您正在处理的节点项目的目录中。您可以调用另一个node.js项目(模块),以将其安装为项目的依赖项。 是的别名,除非您在package.json文件中指定“ build”的作用,否则它什么都不做。它使您可以在将其用于另一个项

  • 我试图理解,何时何地使用这些标签,我明白一个是开发依赖项,另一个是项目依赖项,但是当将其用于实时项目时,我没有发现任何差异。我正在寻找一种方法,这将抛出错误的安装类型。有办法做到这一点吗?