为什么yarn安装开发依赖项但我只需要构建?

问题描述 投票:0回答:6

如果我使用

yarn add <package-name>
,Yarn 将安装
<package-name>
的依赖项和 devDependency。 是故意的吗

我检查了文档,但找不到阻止安装开发依赖项的方法。

devDependencies
是用于编译一个包的源代码的依赖项,因此如果我在生产环境中,我不需要它们。

javascript node.js npm yarnpkg
6个回答
102
投票

自yarn 3及更新版本(至少4)

--production
标志不再存在。请改用此命令:

yarn workspaces focus --production

更多详细信息请参见此处 https://yarnpkg.com/cli/workspaces/focus

旧答案纱线 1 和 2 兼容

使用

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

查看 Yarn 的 文档


15
投票

正如@ddotsenko的评论中所说

不是“损坏”,而是“设计糟糕”——如果yarn需要解析“完整树”,prod仍然会下载并“安装”开发包。只需

使用 yarn install --production --frozen-lockfile

 并匹配yarn.lock 和 --product 将按预期工作。

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

npm

pnpm


8
投票

NODE_ENV=production

 还可以防止安装 devDependency


3
投票
对于 Yarn 2+,Yarn 似乎专注于 PnP 安装,这意味着内容可寻址的数据结构取代了经典的

node_modules

 并被假定为包的一部分,因此包源将自动包含 
devDependencies

尽管如此,

yarn workspaces focus <name> --production

允许安装工作区包
而无需`devDependency。请参阅 https://yarnpkg.com/cli/workspaces/focus 了解更多信息。


1
投票
Yarn 有一个 --product 选项,这将导致它仅安装生产依赖项。这显示在

这里


1
投票
现有的答案似乎没有抓住问题的要点(包括已接受的答案)。

如果我调用

yarn add <my-package>

,Yarn 将安装 
<my-package>
 的依赖项和 devDependency。这是正常行为吗?

不,这听起来像是一个错误。我在最新版本的yarn v1 中没有看到这种行为。

如果我

yarn add foo

到我的项目,我应该安装:

    我的直接依赖
  • foo
    
    
  • foo
    的任何依赖关系及其递归依赖关系
  • 不是 foo
    的devDependency
    
  • 我的项目的 devDependency(除非使用其他答案中提到的各种生产标志/变量)
  • (据我所知,yarn 不会像最近的 npm 版本那样自动安装对等依赖项)
如果您正在运行

yarn add

,则可以假设您处于“开发”环境中。

© www.soinside.com 2019 - 2024. All rights reserved.