锁定依赖版本

一段解释

您的代码依赖于许多外部包,假设它“需要”和使用momentjs-2.1.4,默认情况下,当布署到生产中时,npm可能会获得momentjs 2.1.5,但不幸的是,这将带来一些新的bug。使用npm配置文件和设置 –save-exact=true 指示npm去完成安装,以便下次运行 npm install(在生产或在Docker容器中,您计划将其用于测试)时,将获取相同的依赖版本。另一种可选择受欢迎的方法是使用一个shrinkwrap文件(很容易使用npm生成)指出应该安装哪些包和版本,这样就不需要环境来获取新版本了。

  • 更新: 在npm5中,使用.shrinkwrap依赖项会被自动锁定。Yarn,一个新兴的包管理器,默认情况下也会锁定依赖项。

代码示例: .npmrc文件指示npm使用精确的版本

  1. // 在项目目录上保存这个为.npmrc 文件
  2. save-exact:true

代码示例: shirnkwrap.json文件获取准确的依赖关系树

  1. {
  2. "name": "A",
  3. "dependencies": {
  4. "B": {
  5. "version": "0.0.1",
  6. "dependencies": {
  7. "C": {
  8. "version": "0.1.0"
  9. }
  10. }
  11. }
  12. }
  13. }

代码示例: npm5依赖锁文件 - package.json

  1. {
  2. "name": "package-name",
  3. "version": "1.0.0",
  4. "lockfileVersion": 1,
  5. "dependencies": {
  6. "cacache": {
  7. "version": "9.2.6",
  8. "resolved": "https://registry.npmjs.org/cacache/-/cacache-9.2.6.tgz",
  9. "integrity": "sha512-YK0Z5Np5t755edPL6gfdCeGxtU0rcW/DBhYhYVDckT+7AFkCCtedf2zru5NRbBLFk6e7Agi/RaqTOAfiaipUfg=="
  10. },
  11. "duplexify": {
  12. "version": "3.5.0",
  13. "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.0.tgz",
  14. "integrity": "sha1-GqdzAC4VeEV+nZ1KULDMquvL1gQ=",
  15. "dependencies": {
  16. "end-of-stream": {
  17. "version": "1.0.0",
  18. "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.0.0.tgz",
  19. "integrity": "sha1-1FlucCc0qT5A6a+GQxnqvZn/Lw4="
  20. }
  21. }
  22. }
  23. }
  24. }