如何避免npm安装/更新惊喜?

时间:2018-01-25 10:25:56

标签: node.js angular npm angular-cli devops

如何在部署/升级时安全地进行npm安装/更新?

  • 问题1: npm install是一个有状态操作,它依赖于执行命令时的最新版本的依赖项。这会导致部署时出现意外,因为package.json文件表示范围而非特定版本。

  • 问题2:每次制作npm update或使用ncu时,我都会花费数小时/天试图处理模块之间的不一致。为什么会在2018年发生这种情况?

  • 问题3:如何让package.json文件准确描述已安装软件包的状态而不是范围,以便我可以毫无意外地进行部署?

NB:我使用Angular

3 个答案:

答案 0 :(得分:4)

如果您使用yarn或更新版本的npm,则会为您生成yarn.lockpackage-lock.json

这将保留所有软件包首次安装时的版本,因此对yarnnpm install的进一步调用将获取并安装这些版本。

当然,您应该将这些锁定文件添加到您的存储库,这样任何进行全新克隆的人都会安装相同的依赖项。

请参阅npm docs:https://docs.npmjs.com/files/package-lock.json

纱线文件:https://yarnpkg.com/lang/en/docs/yarn-lock/

答案 1 :(得分:1)

  1. package.json file indicates ranges but not specific versions:重新阅读documentation,您可以指定特定版本。有关示例,请参见第3点。
  2. Why would this happens in 2018< =我/我们无法推测您没有包含任何具体细节的问题,它可能是您有效的一般抱怨,但StackOverflow不是发泄它的正确位置。
  3. 再次,请参阅documentation。您只需在=符号中添加版本号即可。以下示例仅获取5.0.0的版本@angular/cdk

    "@angular/cdk": "5.0.0"
    

答案 2 :(得分:0)

请注意,对npm update的任何调用都将使用最新的 minor 版本更新您的package.json,因此设置严格约束版本ex(5.0.0)仅在不存在npm install的情况下与package-lock.json一起使用。在执行npm update时,您的5.0.0约束将被^5.5.0约束(或下一个次要版本是什么)取代。如果您使用的软件包正确实现了就可以了,但是在次要发行版中破坏更改会遇到很多问题。