【问题标题】:What is `"dev" true` in package-lock.json for?package-lock.json 中的 `"dev" true` 是做什么用的?
【发布时间】:2018-09-23 08:53:27
【问题描述】:

"dev" truepackage-lock.json 文件中是什么意思?

在我的情况下,它会在我执行npm 操作时自动更新。

我们怎样才能删除它?

【问题讨论】:

  • package-lock.json 有很多谜团。除了 dev 这个东西之外,哈希有时有一个较长的版本和一个较短的版本。

标签: npm package.json


【解决方案1】:

来自https://docs.npmjs.com/files/package-lock.json的 npm 文档

如果为 true,则此依赖项要么是仅顶层模块的开发依赖项,要么是一个传递依赖项。这对于既是顶层的开发依赖又是顶层非开发依赖的传递依赖的依赖是错误的。

【讨论】:

  • 你能简单解释一下吗?
  • 我们为什么需要它?
  • 我的package-lock.json 文件在不断变化。在大多数情况下,唯一的区别是包含或删除“dev: true”!鉴于其所谓的目的,我当然不会在它和“devDependencies”之间移动依赖关系,所以我不明白为什么我会看到这种变化。
  • 简化版:如果包添加为 dev-dependency 并且还被 dev-dependencies 中的其他包使用,则 dev: true。如果依赖项中的 至少一个 包需要该包 - npm 会切换它dev: false
  • 一个传递依赖的例子是:如果 packageA 依赖 packageB 作为 development 依赖,而 packageB 依赖 packageC 作为 development 依赖,那么 packageC 是 packageA 的传递依赖。跨度>
【解决方案2】:

我认为这一段试图说明包依赖的 dev: true 是如何分配的。

  • 直接开发依赖 -> dev: true
  • 只有间接开发依赖 -> dev: true
  • 但是直接开发依赖 它也有间接的非开发依赖 -> 没有“dev: true”

换句话说,一旦一个开发依赖包被一个非开发包间接依赖,它应该是dev: false,因此它将被包含在构建过​​程中。这条规则的目的是确保非开发包需要的包不会有“dev: true”。

此外,如果通过“npm install -D”安装,则该软件包将作为开发包安装,因此不会发生“dev: true”更改。但是,如果通过“npm install”安装,这可能会删除许多现有的依赖项的“dev: true”属性。

例如,我在我的项目中运行“npm install -D bestzip”,结果是:

  • 53 个带有“dev”的依赖项:添加了 true

运行“npm install bestzip”,结果是:

  • 53 个没有“dev”的依赖项:添加了 true
  • 43 个现有依赖项的“dev”:true 属性已删除

【讨论】:

  • 我们不能说因为某个依赖在 package.json 中的 "devDependencies": {..} 下,它的子依赖将附加 "dev": true 以防我们运行 npm install
【解决方案3】:

所以回答你的第一个问题,package-lock.json 中的"dev": true 意味着在production 模式下运行时npm install/npm ci 不会安装此依赖项。

将依赖项仅用于标有 "dev": true 的本地开发环境,然后在 CI 中使用 --production 可能会节省一些构建时间。

来自文档https://docs.npmjs.com/cli/install#description

默认情况下,npm install 将安装列出的所有模块 package.json 中的依赖项。

使用--production 标志(或当NODE_ENV 环境 变量设置为production),npm 将不会安装列出的模块 在devDependencies

【讨论】:

    猜你喜欢
    • 2017-12-20
    • 1970-01-01
    • 2017-11-02
    • 2018-03-21
    • 1970-01-01
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多