如何在部署/升级时安全地进行npm安装/更新?
问题1: npm install
是一个有状态操作,它依赖于执行命令时的最新版本的依赖项。这会导致部署时出现意外,因为package.json
文件表示范围而非特定版本。
问题2:每次制作npm update
或使用ncu
时,我都会花费数小时/天试图处理模块之间的不一致。为什么会在2018年发生这种情况?
问题3:如何让package.json
文件准确描述已安装软件包的状态而不是范围,以便我可以毫无意外地进行部署?
NB:我使用Angular
答案 0 :(得分:4)
如果您使用yarn
或更新版本的npm
,则会为您生成yarn.lock
或package-lock.json
。
这将保留所有软件包首次安装时的版本,因此对yarn
或npm install
的进一步调用将获取并安装这些版本。
当然,您应该将这些锁定文件添加到您的存储库,这样任何进行全新克隆的人都会安装相同的依赖项。
请参阅npm docs:https://docs.npmjs.com/files/package-lock.json
答案 1 :(得分:1)
package.json file indicates ranges but not specific versions
:重新阅读documentation,您可以指定特定版本。有关示例,请参见第3点。Why would this happens in 2018
< =我/我们无法推测您没有包含任何具体细节的问题,它可能是您有效的一般抱怨,但StackOverflow不是发泄它的正确位置。 再次,请参阅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
约束(或下一个次要版本是什么)取代。如果您使用的软件包正确实现了就可以了,但是在次要发行版中破坏更改会遇到很多问题。