yarn 工作空间也可以与 npm 一起使用吗?

Do yarn workspaces work with npm, too?

我查看了一个使用 yarn 而不是 npm 作为构建工具的 repo。

在package.json中定义了工作空间来处理多个子项目:

{
  "workspaces": [
    "packages/*"
  ],
  "dependencies": [],
  "devDependencies": [
    // long list
  ]
}

因此,根 package.json 不包含任何运行时依赖项。只有 packages/*/package.json 包含那些。

要编译(并以开发模式启动)我这样做:

yarn install
yarn start

我没有找到任何文档,workspaces 也被 npm 识别并正确使用。

有没有办法让它也与 npm 一起工作?

npm 不支持在 monorepo 中管理依赖项。 Lerna 包用于管理具有交叉依赖关系的 JavaScript 项目。我相信 Lerna 在底层使用 Yarn,但是使用 Yarn 作为项目的包管理器,这个功能是开箱即用的。

这里有一个 repo,可能有助于了解 Yarn 和 Lerna 如何协同工作:https://github.com/Quramy/lerna-yarn-workspaces-example

npm 计划在 v7, hopefully. They've written about it in their blog and there's an accepted proposal 的某个地方实施 workspaces

自 2020 年 8 月 11 日起,工作区在 v7 测试版中可用。

RFC 26 First phase of workspaces support is added. This changes npm’s behavior when a root project’s package.json file contains a workspaces field.

https://blog.npmjs.org/post/626173315965468672/npm-v7-series-beta-release-and-semver-major

您可以在此处查看和下载测试版:

https://github.com/npm/cli/tags

现在 npm v7.0.0 已经出来了,npm 支持 workspaces。您可以从单个 top-level 根包中管理多个包。在 https://github.blog/2020-10-13-presenting-v7-0-0-of-the-npm-cli/

查看更多

默认情况下,您的工作流程不会获得 npm v7.0.0,除非您使用 npm install -g npm@7.

安装它

NPM 版本 7 支持工作区管理。现在我们可以使用 npm workspace 管理我们的工作区依赖关系。

有关工作区支持的更多信息,请参见此处的官方网站。

https://docs.npmjs.com/cli/v7/using-npm/workspaces

如果您正在寻找一个简单的示例,请遵循此 link

https://github.com/pravanjan/npm-workspace-example/tree/master

使用节点 v16.6.1 测试 npm 7.20.3