纱线工作区:nohoist exclude
Posted
技术标签:
【中文标题】纱线工作区:nohoist exclude【英文标题】:Yarn workspaces: nohoist exclude 【发布时间】:2020-09-30 06:37:15 【问题描述】:在我的 package.json 中,我目前有
"workspaces":
"nohoist": **
我想只指定两个要吊装的包裹,其他所有东西都不要吊装。有没有一种简单的方法可以做到这一点,而无需将除这两个之外的所有包粘贴到nohoist
中吗?
【问题讨论】:
【参考方案1】:经过几天的挖掘,我最终得到了以下配置。
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"
我在这个示例中还包含了一个安装后脚本,它超出了主题,但显示了我们如何在安装依赖项后建立到同级包的符号链接。安装后,Yarn Workspaces 会为工作空间根 /node_modules
中的每个包创建一个符号链接。我们可以利用这一点,通过将yarn link
的--link-folder
参数指向工作区根目录下的/node_modules
,使用其中一个链接轻松地在包中创建所需的符号链接。
这假定@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
中,而不是在私有包node_modules
下。此外,如果@someone/someones-components
已下载到/packages/@someone/someones-components
,它与我们的packages
指令"packages/**/*"
匹配,也没有下载到/node_modules
,而是像这样符号链接:
/node_modules/@someone/someones-components -> ../../packages/@someone/someones-components
这是完美的。我们唯一需要做的就是使安装后脚本保持最新,以便在依赖包中提供所需的符号链接。我想我们也可以自动查找脚本中的依赖关系并建立链接。
搜索关键字:monorepo lerna(不需要)
【讨论】:
我仍然遇到了麻烦,因为该配置中的链接存在错误,并且 Yarn 没有将依赖项添加为开发依赖项,而是作为生产依赖项添加,然后抱怨它所犯的错误。我认为这可以通过直接编辑 package.json 中的依赖项来解决,但我放弃了。以上是关于纱线工作区:nohoist exclude的主要内容,如果未能解决你的问题,请参考以下文章