当我只需要构建时,为什么yarn会安装dev依赖项?

vde*_*nne 10 javascript node.js npm yarnpkg

如果我调用yarn add <my-package>,Yarn将安装依赖项和devDependencies <my-package>.这是正常的行为吗?

我检查了文档,但我找不到阻止它安装开发依赖项(我不需要)的方法.我相信devDependencies是用于将源代码编译到构建脚本中的依赖项.构建我的应用程序我只需要构建.

kim*_*y82 15

使用--production=true(或简单--production--prod简称).这确实是正常行为; 除非您的NODE_ENV环境变量设置为"生产",否则Yarn假定您处于"开发"上下文中.

看看Yarn的文档.

  • 虽然迟到了,但在 Yarn 2+ 中执行此操作的新方法是使用 `yarnworkspaces focus --product --all`:https://yarnpkg.com/cli/workspaces/focus (6认同)
  • 不幸的是,我没有答案,但我想指出,截至 2022 年 1 月,上述内容都不正确。无论选项和 NODE_ENV 环境变量如何,Yarn 将*始终*安装 devDependency。 (5认同)
  • 由于 https://github.com/yarnpkg/yarn/issues/6323,此功能似乎已损坏 (3认同)
  • 如果yarn需要解析“完整的树”,不是“损坏”而是“设计糟糕”,`--prod`仍然会下载并“安装”`dev`包。只需使用 `yarn install --product --frozen-lockfile` 并匹配 `yarn.lock` 和 `--product` 将按预期工作。 (3认同)
  • 在 Yarn 2.0 中,`--product` 标志已被弃用。如何防止yarn 2.0安装开发依赖项? (2认同)

ser*_*inc 14

正如@ddotsenko 的评论中所说

不是“损坏”而是“设计糟糕”——如果yarn需要解析“完整树”,prod仍然会下载并“安装”开发包。只需使用yarn install --production --frozen-lockfile并匹配yarn​​.lock和--生产即可按预期工作。

这可以将 210 MB 的 node_modules 删除到 70 MB,类似于npmpnpm


zyf*_*fyy 6

NODE_ENV=production还阻止安装 devDependencies

  • 在执行“yarn”或“yarn install”之前使用“NODE_ENV=生产”作为环境 (3认同)