在保存package.json依赖项时,哪种做法是最好的?
例如,我看到很多依赖项不是固定的,例如:
"tslint": "~5.11.0"
我希望有固定的依赖关系,以便将来新开发人员加入团队时不会改变。
我对package-lock.json和shrinkwrap知之甚少,但是我不确定这方面的“最佳实践”。 在这种情况下,是一个Angular应用程序,但可以包含所有内容。例如,将package-lock.json保留在存储库中会在过去引起一些问题(我知道!最好将其推送!)
有什么想法吗?
答案 0 :(得分:1)
简短的回答:最好使用Carets(^
)并提交package-lock.json
。这样可以确保开发人员始终获得相同的依赖关系,并且最令人惊讶的是。
package-lock.json
? npm特别建议您提交package-lock.json
。
强烈建议您将生成的程序包锁定提交给源代码控制:这将允许您团队中的其他任何人,您的部署,您的CI /持续集成以及在程序包源中运行npm install的其他任何人都可以获取准确的信息您在其上开发的依赖树。
您提到过将package-lock.json
推送到存储库中在过去曾引起一些问题。我猜这是由于this issue导致的,每次有人安装任何东西时,包锁都会被忽略并重写。根据{{3}},这不是正确的行为,并已在npm@5.4.2中修复。
您应该不要做的是省略package-lock.json
,而只需在package.json
中指定确切的版本。如果这样做,您的顶级依赖项将看起来不错且一致,但是它们的依赖项不会锁定版本。这样,您几乎有可能遇到错误,但是很难找到它们。
npm-shrinkwrap.json
?您还提到了wrapwrap文件。拆封文件适用于
通过发布过程在注册表上部署的应用程序
(来自this answer)
您可能没有npm publish
使用角度的Web应用程序,因此没有理由使用npm-shrinkwrap.json
。
我找不到任何文档说明插入符号(^
)的最佳做法,但我相信它们是最佳选择。
npm
将插入号范围设置为默认选项,因此很明显他们认为这是最佳做法,尽管我找不到他们的任何文档来证明这一点。
使用默认值是最令人惊讶的方法。如果我在package.json
中看到任何其他类型的版本,我会认为它是有充分理由进行了更改的,并且即使确实需要将其更新,也会在不知道原因的情况下犹豫不决。已更新。
如果您决定一次更新所有依赖项,则插入符范围将很好地为您服务。您的依赖项通常会被锁定,但是删除package-lock.json
并重新运行npm install
会自动安装最新版本,该版本应该与您指定的版本向后兼容(有关详细信息,请参见npm documentation)插入符号范围。
总而言之,使用插入符号范围和package-lock.json
是标准的。这样可以满足您对固定依赖项的要求,并提供其他一些好处,因此最好执行标准操作,除非您找到其他更改的理由。