保存 package.json 依赖项时的最佳实践是什么?
例如,我发现很多依赖项都没有修复,例如:
"tslint": "~5.11.0"
我希望有固定的依赖关系,这样将来当新开发人员加入团队时,这种依赖关系就不会改变。
我对package-lock.json和shrinkwrap知之甚少,但我不确定这方面的“最佳实践”。 在本例中是一个 Angular 应用程序,但它可以是一切。例如,将 package-lock.json 保留在存储库上会导致过去出现一些问题(我知道!这是推送它的最佳实践!)
有什么想法吗?
最佳答案
简短回答:插入符 (^
) 并提交 package-lock.json
可能是最好的方法。这确保了开发人员始终获得相同的依赖项,这是最不令人惊讶的。
为什么package-lock.json
?
npm 特别建议您提交 package-lock.json
。
It is highly recommended you commit the generated package lock to source control: this will allow anyone else on your team, your deployments, your CI/continuous integration, and anyone else who runs npm install in your package source to get the exact same dependency tree that you were developing on.
您提到将 package-lock.json
推送到您的存储库在过去引起了一些问题。我猜这是由于 this issue每次有人安装任何东西时,程序包锁都会被忽略并重写。根据 this answer,这不是正确的行为,并已在 npm@5.4.2 中修复。 .
您应该不做的是省略package-lock.json
并仅在package.json
中指定确切的版本。如果这样做,您的顶级依赖项将看起来很好且一致,但它们的依赖项不会有锁定版本。这样,您遇到错误的可能性几乎相同,但更难发现。
为什么不使用npm-shrinkwrap.json
?
您还提到了收缩包装文件。收缩包装文件适用于
applications deployed through the publishing process on the registry
您可能没有 npm 发布
您的 Angular Web 应用程序,因此没有理由使用 npm-shrinkwrap.json
。
为什么使用插入符范围?
我找不到任何文档说插入符 (^
) 范围是最佳实践,但我相信它们是最佳实践。
npm
使插入符号范围成为默认选项,因此很明显他们认为这是最佳实践,尽管我找不到他们的任何文档来证明这一点。
使用默认值是最不令人惊讶的方法。如果我在 package.json
中看到任何其他类型的版本,我会认为它的更改是有充分理由的,并且在不知道原因是什么的情况下会犹豫更新包,即使它确实需要更新。
如果您决定一次更新所有依赖项,插入符号范围将为您提供良好的服务。您的依赖项通常会被锁定,但删除 package-lock.json
并重新运行 npm install
将自动安装最新版本,这些版本据称与您的版本向后兼容指定(有关插入符范围的详细信息,请参阅 the npm docs)。
总之,使用脱字符号范围和 package-lock.json
是标准做法。这满足了您对固定依赖项的要求,并提供了一些其他好处,因此最好遵循标准,除非您找到其他更改原因。
关于node.js - 关于依赖关系的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55484223/