Yarn工作区如何仅为指定包安装依赖?Lerna场景求助
解决方案:在Yarn工作区/Lerna中仅安装单个包的依赖
我之前也碰到过一模一样的问题——Yarn工作区的默认行为确实会让你在子包目录运行yarn install时触发整个工作区的依赖安装,导致根目录和所有子包都生成node_modules。下面是几个靠谱的解决办法:
方法1:使用Yarn的--focus标志(推荐)
这是Yarn专门为工作区场景设计的命令,完美匹配你的需求。直接在目标子包的目录下运行:
yarn install --focus
这个命令会:
- 仅处理当前目录的
package.json,安装该包的直接依赖和间接依赖 - 不会触发整个工作区的依赖hoist,也不会在根目录或其他子包生成
node_modules - 如果你的包依赖工作区内的其他包,它会自动关联这些本地包,不需要额外配置
方法2:临时禁用工作区模式
如果你的目标包没有依赖工作区内的其他包,可以用--no-workspaces参数完全禁用工作区逻辑:
yarn install --no-workspaces
这样Yarn会把当前目录当成一个独立的非工作区项目,只安装这个包的依赖,完全不会影响根目录和其他子包。但要注意,如果你的包依赖工作区内的其他包,这个命令会报错,因为它找不到本地的内部依赖了。
方法3:在根目录通过工作区命令指定包(Yarn 1/2都支持)
如果你不想切换到子包目录,也可以在项目根目录运行:
yarn workspace <你的包名> install
比如你的包叫packageA,就运行:
yarn workspace packageA install
这个命令会精准定位到packageA,仅安装它的依赖,同样不会影响其他包和根目录的依赖状态。
为什么原来的做法会失效?
因为Yarn工作区会通过根目录package.json里的workspaces配置识别整个项目结构,哪怕你在子包目录运行yarn install,Yarn还是会向上遍历找到根目录的配置,然后触发整个工作区的依赖安装和hoist操作,所以才会在所有目录生成node_modules。
内容的提问来源于stack exchange,提问作者Red Baron
相关产品推荐
相关产品推荐

