美文网首页
npm-lock.json vs npm-shrinkwrap.

npm-lock.json vs npm-shrinkwrap.

作者: 张培_ | 来源:发表于2019-03-31 13:34 被阅读0次

    本文针对: npm:6.9.0/node:v8.11.4

    区别

    是否publish

    • 当你需要发布一个自己的package到register

      • 如果你的package中包含npm-shrinkwrap.json,那么这个文件会随着包一起发布到register
      • 如果的package中包含npm-lock.json,那么这个文件一定不会随着一起发布到register

      并且你可以通过npm pack指令查看你即将要发布的包中包含的内容。

    安装

    • 如果你的project中同时存在npm-lock.json and npm-shrinkwrap.json, 那么install会完全忽视npm-lock.json, 而完全根据npm-shrinkwrap.json 安装

    生成

    • 当你执行npm install会自动生成npm-lock.json (npm 5+)
    • npm-shrinkwrap.json 只会在执行npm shrinkwrap才会被安装

    内容

    两种文件内容完全一致:

    • version: 写明depedency的一个确定的版本
    • resolved: 写明depedency的安装地址
    • integrity: 根据包中的内容生成的hash值,它使用 Subresource Integrity 来验证已安装的软件包是否被改动过,换句话来说,验证包是否已失效。

    这三个参数可以确定一个唯一的depedency

    • require:除最外层的 requires 属性为 true 以外, 其他层的 requires 属性都对应着这个包的 package.json 里记录的自己的依赖项
    • dependency: dependencies 层次结构与文件系统中 node_modules 的文件夹层次结构是完全对照的,这个字段可以理解成是node_module的快照

    影响因素(lock和shrink相同)

    • 因为lock文件一定是node_module的快照,因此任何会updatenode_module的行为,都会对lock文件产生影响,比如npm install newPackage,npm install oldPackage@newVersion, npm update, npm remove
    summary:只要node_module发生变化必然会导致lock文件发生变化

    如何产生

    • package-lock.json: 执行npm install 默认会产生一个这个文件
    • npm-shrinkwrap.json: 执行npm shrink 会产生一个这个文件

    假设:

    • 目录中已经存在package-lock.json,此时再次执行npm shrink

      package-lock.json文件消失,只留下npm-shrinkwrap.json

    • 目录中已经存在npm-shrinkwrap.json,此时再次执行npm install

      没有办法再次产生package-lock.json

    相关文章

      网友评论

          本文标题:npm-lock.json vs npm-shrinkwrap.

          本文链接:https://www.haomeiwen.com/subject/icpybqtx.html