使用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