如何使用 Yarn 定位单个工作区?

Posted

技术标签:

【中文标题】如何使用 Yarn 定位单个工作区?【英文标题】:How to target a single workspace with Yarn? 【发布时间】:2019-11-10 16:34:25 【问题描述】:

我有这样设置的工作区

"private": true,
  "workspaces": 
    "packages": [
      "packages/*"
    ],
    "nohoist": [
      "**/firebase-admin",
      "**/firebase-admin/**",
      "**/firebase-functions",
      "**/firebase-functions/**"
    ]
  ,

在我的包目录中,我有一个文件夹 common 以及它自己的 package.json 等。

当我执行yarn workspaces run build 时,它会触发所有工作区的构建脚本。但是,如果我尝试使用yarn workspace 命令(如yarn workspace common build)定位一个特定的工作区,我会不断收到错误消息:

错误未知工作区“常见”。

这是我来自yarn workspaces info的输出:

yarn workspaces v1.17.0

  "@gemini/cli": 
    "location": "packages/cli",
    "workspaceDependencies": [],
    "mismatchedWorkspaceDependencies": []
  ,
  "@gemini/cloud-functions": 
    "location": "packages/cloud-functions",
    "workspaceDependencies": [
      "@gemini/common"
    ],
    "mismatchedWorkspaceDependencies": []
  ,
  "@gemini/common": 
    "location": "packages/common",
    "workspaceDependencies": [],
    "mismatchedWorkspaceDependencies": []
  ,
  "@gemini/tools": 
    "location": "packages/tools",
    "workspaceDependencies": [],
    "mismatchedWorkspaceDependencies": []
  

我尝试将名称更改为 package/common 或 @gemini/common 但没有运气。

我在这里缺少什么?

【问题讨论】:

确保使用 package.json 文件中定义的包名而不是文件夹名 【参考方案1】:

当您想在特定工作区调用命令时,您应该使用在其 package.json 文件“名称”中设置的包名称。在您的情况下,它应该是:

yarn workspace @gemini/common build

我尝试将名称更改为 package/common 或 @gemini/common,但没有成功。

您不应该看到错误error Unknown workspace "@gemini/common". 也许您遇到了其他错误?

【讨论】:

我非常确定我已经尝试过了 ?‍♂️我一定看到了不同的错误。但现在可以了,谢谢! 为什么这不适用于安装?我有完全相同的设置,但它到处都安装 node_modules。我只是想为大坝项目做。 这似乎不太好用:例如yarn workspace foo upgrade-interactive 在所有工作空间中提供升级包,而不仅仅是foo... 有没有办法将其限制为仅限于该工作空间? 对您的具体问题的简短回答 - 不。我建议您阅读有关使用 yarn V1 进行依赖管理的更多信息或针对您的问题创建专门的问题【参考方案2】:

如果您想在工作区<workspace> 中运行build 脚本,则该命令的语法为

yarn workspace <workspace> build

例如,我的根 package.json 中有以下内容:

  "workspaces": [
    "api",
    "app"
  ],

那么我可以运行yarn workspace api build

【讨论】:

我所有的工作空间都位于 packages 子目录中。我试过“packages/common”,但不是这样。所以显然你必须使用模块名称。在您的情况下,它与您的工作区包目录名称相同,但这不是命令所需要的。

以上是关于如何使用 Yarn 定位单个工作区?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Yarn 工作区/nohoist 时,如何控制 Yarn 为依赖项的 peerDependency 选择哪个版本?

如何使用 Yarn 2+ 列出每个公共工作区?

如何使用 yarn 2 (berry) 设置工作区存储库

如何在 node-sass 工作的情况下使用 yarn install --offline?

使用 yarn 工作区和 react-router-dom v6 时如何正确继承上下文?

如何在 R 中定位使用 kNN 错误分类的单个样本?