【问题标题】:Do yarn workspaces work with npm, too?yarn 工作空间也可以与 npm 一起使用吗?
【发布时间】:2018-04-07 10:29:09
【问题描述】:

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

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

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

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

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

yarn install
yarn start

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

有没有办法让它也可以与 npm 一起使用?

【问题讨论】:

  • Npm 有一个workspace feature,但是那里的配置文件叫做workspace.json
  • @MarkusPscheidt 您的评论具有误导性:该链接指向(第三方)包,而不是 NPM 包管理器的官方功能
  • @StevenLiekens 对。感谢您解决这个问题。
  • @helt 您能否将接受的答案更新为 Sahan Amarsha 的答案。我认为鉴于现在已经是 2020 年底,当前接受的答案是完全不正确的。
  • @BohdanTsymbala 我犹豫是否要切换它,因为我的假设是 npm 7 还不是使用最广泛的 npm 版本。除此之外,有一个新答案这一事实并不会导致以前的答案不正确——只是过时了。

标签: npm package.json yarnpkg


【解决方案1】:

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

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

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

如果您正在寻找一个简单的示例,请点击此链接

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

使用节点 v16.6.1 测试 npm 7.20.3

【讨论】:

    【解决方案2】:

    现在 npm v7.0.0 已经发布,npm 支持workspaces。您可以从单个顶级根包中管理多个包。更多信息请访问https://github.blog/2020-10-13-presenting-v7-0-0-of-the-npm-cli/

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

    【讨论】:

    • 我现在对 NPM7 非常小心。几天来,我一直在使用可用的极少文档和博客文章来玩工作区:adfallon.wordpress.com/2020/11/01/… 从表面上看,这似乎非常令人兴奋,但我无法完成任何这项工作。特别是,在我到目前为止的测试中,以下绝对行不通。 “如果没有工作区,React 应用程序会抱怨它找不到名为 @xyz/ui 的模块,并会开始在 npm 官方注册表中查找它。”
    【解决方案3】:

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

    RFC 26 第一阶段添加了workspaces 支持。这改变了 当根项目的 package.json 文件包含 workspaces 字段。

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

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

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

    【讨论】:

      【解决方案4】:

      npm 计划在v7 的某个地方实施workspaces,希望如此。他们的博客中有writtenabout it,还有an accepted proposal

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

        • Lernanpm 作为默认 npmClient 一起使用,但您可以将其设置为使用:{ "npmClient": "yarn", "useWorkspaces": true }
        猜你喜欢
        • 2018-09-22
        • 2011-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-29
        • 2019-02-10
        • 2021-05-01
        相关资源
        最近更新 更多