使用纱线工作区时,如何强制将包安装在相对 node_modules 中?

When using yarn workspaces, how to force a package to be installed in the relative node_modules?

我喜欢 yarn workspaces,但由于与外部工具不兼容,我经常发现自己不得不拿出一个特定的包。

主要问题是我在 相对 node_modules 中没有他们的源代码,但在上面几个级别(这对于 yarn 工作区和节点,一般来说)。

例如,当在相对路径中找不到 "openzeppelin-eth" 时,ZeppelinOS 会给出以下错误消息:

Could not find a zos.json file for 'openzeppelin-eth'. Make sure it is provided by the npm package.

有没有办法强制复制一个包?我读到了 --focus,但这不是我需要的。

您要找的是 nohoist https://yarnpkg.com/blog/2018/02/15/nohoist/

基本上你有两个选择:

  1. 从子包开始
"workspaces": {
  "nohoist": ["react-native", "react-native/**"]
}
  1. 从根本上做起
"workspaces": {
  "packages": ["packages/*"],
  "nohoist": ["**/react-native", "**/react-native/**"]
}

如果要在所有子项目中共享包 xyz,则将其设置在根项目中,否则在子项目中设置。