代码之家  ›  专栏  ›  技术社区  ›  Bill

package-lock.json文件,package with“optional”:true

  •  1
  • Bill  · 技术社区  · 6 年前

    npm

    我的一个同事的pr包含一个package-lock.json更新,它注入了optional:true。我不知道那是什么,即使在网上搜索。有人能解释一下吗?

    1 回复  |  直到 6 年前
        1
  •  19
  •   Francesc Rosas    6 年前

    https://docs.npmjs.com/files/package-lock.json#optional :

    如果为true,则此依赖项要么是顶层模块的可选依赖项,要么是顶层模块的可传递依赖项。对于同时是顶级的可选依赖项和顶级的非可选依赖项的传递依赖项的依赖项,这是错误的。

    合并此更改是安全的。

    你看到这种变化的原因很可能是因为 npm slightly changed how package-lock.json is structured in version 6.6 . 你的同伴基本上跑了 npm install 在先前用npm 6.5-生成的package-lock.json上使用npm6.6+。

    通过确保团队中的每个人都使用最新版本的npm,您应该能够避免此类问题。

        2
  •  2
  •   R.S    6 年前

    原因之一是:

    一些npm包可能需要依赖包(例如minimist)才能在不同的操作系统中工作。npm将此软件包标记为npm安装时的可选软件包,如果有的话,根据您正在使用的操作系统,这是不需要的。

    请检查以下问题:

    开放问题:package-lock.json和可选包: https://github.com/npm/npm/issues/17722

    希望有帮助。

        3
  •  2
  •   yanychar    6 年前

    从依赖项中删除包后,将标记其依赖项 "optional": true 在里面 package-lock.json .

    通常可以用手或通过

    $ rm -rf package-lock.json node-modules/
    $ npm install
    

    但是,这不是100%安全的,因为有些包将更新到新版本。