我的package.json中当前有
"workspaces": {
"nohoist": **
}
我想指定两个包装来提升,而在其他所有东西上都没有包装。是否有一种简单的方法可以将我的所有软件包(除了这两个软件包之外)都粘贴到nohoist
中?
答案 0 :(得分:2)
经过几天的挖掘,我最终得到了以下配置。
Yarn 似乎使用了某种 Bash glob pattern matching(有关教程,请参阅此 Linux journal article)。在此配置中,"nohoist"
规则对每个 virtual path 以列表中的字符串之一结尾的模块禁用提升。遗憾的是,Yarn 将字符串解释为前缀,因此“my-site-whatever”和“someones-components-whatever”等模块也匹配,但这可以解决。
{
"private": true,
"version": "independent",
"workspaces": {
"packages": [ "packages/**/*" ],
"nohoist": [
"**/!(my-site|my-cms|someones-components)"
]
},
"scripts": {
"postinstall": "yarn workspace @myscope/my-site link --link-folder $PWD/node_modules @someone/someones-components"
}
}
我在这个例子中还包含了一个 postinstall 脚本,它不在主题中,但展示了我们如何在安装依赖项后建立指向同级包的符号链接。安装时,Yarn Workspaces 会在工作区根目录 /node_modules
中创建指向每个包的符号链接。我们可以利用这一点,通过将 yarn link
的 --link-folder
参数指向工作区根处的 /node_modules
,使用其中一个链接轻松地在包中创建所需的符号链接。< /p>
这假设 @myscope/my-site/package.json
对 @someone/someones-components
具有声明的依赖关系。可以使用命令添加该依赖项
yarn workspace @myscope/my-site add @someone/someones-components
因为 @someone/someones-components
被配置为在我们的工作空间根目录 package.json
中提升,所以 Yarn 可以自行决定将它安装在工作空间根目录的 /node_modules
中,而不是安装在包私有 {{1} 下}}。此外,如果 node_modules
已被下载到 @someone/someones-components
,它与我们的 /packages/@someone/someones-components
指令 packages
匹配并且也不会下载到 "packages/**/*"
,而是像这样符号链接:
/node_modules
这是完美的。我们唯一需要做的就是使安装后脚本保持最新状态,以便在依赖包中提供所需的符号链接。我想我们也可以自动查找脚本中的依赖项并建立链接。
搜索关键字:monorepo lerna(不需要)
答案 1 :(得分:0)
您可以输入包含要提升的包装的阵列。然后,根据package.json在项目文件夹中的位置,您可以
"nohoist": ["**/npm-package", "**/npm-package/**"]
"nohoist": ["npm-package", "npm-package/**"]