如何在Yarn Workspaces repo中仅安装根包



使用Yarn Workspaces,在其中一个包目录中使用yarn install --focus为单个工作区安装包非常容易。

但是,有时我希望能够只安装顶级package.json中列出的软件包。我在整个repo中运行linter,我希望能够安装linting依赖项,而无需在整个工作区中安装所需的每个包。

我该怎么做?

如果您仍然使用Yarn v1(v2和v3应该没有这个问题(,并且需要在CI中执行此操作,则可以执行此bashhack

tmp=$(mktemp) # create temporary file because jq can't push directly to package.json
jq 'del(.workspaces)' package.json > $tmp && mv $tmp package.json

jq是一个用于操作JSON的程序,您必须单独安装

这有效地去除了";工作空间";密钥,所以剩下的只有根包

参考文献:

  • 通过bash脚本更改json文件
  • 使用jq就地修改json中的键值

只是个想法。作为一种变通方法,您可以将当前的workspaces目录临时重命名为其他目录(如果需要创建一个空的workspaces目录(。使用yarn命令在根程序包中安装程序包。然后,您可以执行任何需要的操作,并且在之前的作业完成后,将空的workspaces目录替换为实际目录,并再次安装依赖项(yarn(。

如果密钥是~dev,则可以在密钥name中使用package.json中存在的根包的名称,例如:

yarn workspaces focus ~dev

最新更新