Yarn技术疑问:为何默认安装devDependencies?如何仅装生产依赖?
关于Yarn依赖安装的两个常见问题解答
1. 为何执行yarn install时会安装devDependencies,而我仅需要构建产物?
默认情况下,yarn install会安装package.json里列出的所有依赖——包括dependencies和devDependencies,因为Yarn默认假设你处于开发环境,需要完整的依赖集来编码、构建或测试。
如果你的需求分两种情况:
- 只需要运行已构建好的产物(无需执行构建过程):可以用
yarn install --production命令,或者先设置环境变量NODE_ENV=production再执行yarn install。这两种方式都会跳过devDependencies,仅安装生产环境必需的dependencies。 - 需要执行构建过程(比如用Webpack、Babel编译源码):那你其实离不开
devDependencies——毕竟这些构建工具本身就是开发依赖。这种情况下必须安装devDependencies才能完成构建,构建完成后,生产环境只需要部署产物和dependencies即可。
2. 执行yarn add <package-name>时,Yarn会同时安装该包的dependencies与devDependencies,这是预期行为吗?
这绝对不是Yarn的预期行为。正常情况下,当你执行yarn add <package-name>时,Yarn只会拉取并安装该包自身的dependencies(生产依赖),完全不会触及它的devDependencies——那些是包维护者开发该包时才需要的工具,和你的项目无关。
如果你确实遇到了这种情况,可能的原因有几个:
- 目标包维护者的失误:把本该放在
devDependencies里的依赖错误地写到了dependencies字段中。你可以查看该包的package.json文件确认这一点。 - 项目自定义配置干扰:比如你的
.yarnrc文件修改了默认安装逻辑,或者安装了某些Yarn插件,导致意外拉取了额外依赖。 - 概念混淆:如果你执行的是
yarn add --dev <package-name>,这是把该包添加到你自己项目的devDependencies里,并非安装它的devDependencies——这是两个完全不同的操作。
如果是目标包的问题,你可以尝试联系维护者修正,或者考虑替代包;如果是自定义配置的问题,检查.yarnrc或已安装的插件,恢复默认安装逻辑即可。
内容的提问来源于stack exchange,提问作者vdegenne
相关产品推荐
相关产品推荐

