当我只需要构建时,为啥 yarn 会安装开发依赖项?

Posted

技术标签:

【中文标题】当我只需要构建时,为啥 yarn 会安装开发依赖项?【英文标题】:Why will yarn install dev dependencies when I just need the builds?当我只需要构建时,为什么 yarn 会安装开发依赖项? 【发布时间】:2018-09-06 21:54:26 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

Yarn 有一个 --production 选项,这将导致它只安装生产依赖项。这显示here

【讨论】:

【参考方案2】:

使用--production=true(或简称--production--prod)。这确实是正常行为; Yarn 假定您处于“开发”环境中,除非您的 NODE_ENV 环境变量设置为“生产”。

看看 Yarn 的documentation。

【讨论】:

这个功能似乎因为github.com/yarnpkg/yarn/issues/6323而被破坏了 不是“损坏”而是“设计不良”--prod 仍然会下载和“安装”dev 包如果纱线需要解析“完整树”。只需使用 yarn install --production --frozen-lockfile 并匹配 yarn.lock--production 即可按预期工作。 @ddotsenko :这很有帮助,现在是一个答案。请写下你自己的功劳,并@通知我删除我的。 --production 标志已被 yarn 2.0 弃用。如何防止yarn 2.0安装dev依赖? 派对迟到了,但在 Yarn 2+ 中这样做的新方法是使用 yarn workspaces focus --production --all: yarnpkg.com/cli/workspaces/focus【参考方案3】:

如the comment by @ddotsenko中所说

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

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

【讨论】:

【参考方案4】:

NODE_ENV=production 也阻止安装 devDependencies

【讨论】:

在执行yarnyarn install之前使用NODE_ENV=production作为环境

以上是关于当我只需要构建时,为啥 yarn 会安装开发依赖项?的主要内容,如果未能解决你的问题,请参考以下文章

yarn之安装依赖包

yarn 如何找到作为开发依赖项安装的模块

Yarn依赖与版本

Yarn依赖与版本

添加包时删除依赖项

Yarn 2 工作区未安装依赖项