【问题标题】:Yarn workspaces: nohoist exclude纱线工作区:nohoist exclude
【发布时间】:2020-09-30 06:37:15
【问题描述】:

在我的 package.json 中,我目前有

"workspaces": {
  "nohoist": **
}

我想只指定两个要吊装的包裹,其他所有东西都不要吊装。有没有一种简单的方法可以做到这一点,而无需将除这​​两个之外的所有包粘贴到nohoist 中吗?

【问题讨论】:

    标签: npm yarnpkg lerna yarn-workspaces


    【解决方案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 中的依赖项来解决,但我放弃了。
    猜你喜欢
    • 2021-12-18
    • 2018-07-18
    • 2019-07-13
    • 2020-08-21
    • 2022-08-02
    • 2021-06-03
    • 2021-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多