如何指定 npm 工作区作为依赖项

vy2*_*218 8 node.js npm npm-workspaces

我无法在任何地方找到这个看似显而易见的问题的答案。

\n

我在项目中设置了一些 npm 工作区。它\xe2\x80\x99 基本上是一个主项目,其中有几个工作区。它们位于名为 \xe2\x80\x9cpackages\xe2\x80\x9d 的顶级文件夹中,每个文件夹都有自己的 package.json。

\n

我需要将工作区添加为主项目的依赖项。我\xe2\x80\x99已将它们添加到主项目的package.json中,但npm一直尝试从npm.org安装它们,因此失败。

\n

I\xe2\x80\x99m 使用以下语法:

\n
\xe2\x80\x9cworkspaces\xe2\x80\x9d:[\n  \xe2\x80\x9cpackages/*\xe2\x80\x9d\n],\n\xe2\x80\x9cdependencies\xe2\x80\x9d: {\n  \xe2\x80\x9cworkspace-a\xe2\x80\x9d: \xe2\x80\x9c^0.0.1\xe2\x80\x9d\n  \xe2\x80\xa6\n}\n
Run Code Online (Sandbox Code Playgroud)\n

如何将工作区指定为 package.json 中的依赖项?

\n

[更新:主项目的最终使用方式是它是一个完全独立的项目的依赖项]

\n

Gia*_*ati 5

我的解决方案

我在根 package.json 中使用显式工作区属性

  "workspaces": [
    "foo-bar",
    "another-package",
    "path/to/another/workspace"
  ]
Run Code Online (Sandbox Code Playgroud)

只需照常添加工作区依赖项(包名称:版本)。我选择使用确切的版本,并且我的所有工作区包都有版本0.0.0。所以我的包 json 看起来像。

  "name": "@project/foo-bar",
  "dependencies": {
    "@project/another-package": "0.0.0"
  },
Run Code Online (Sandbox Code Playgroud)

were@project是包范围,根据自己的需要命名。

与广泛解决方案的差异

请注意,许多文章将通配符设置为版本,例如

  "dependencies": {
    "@project/another-package": "*"
  },
Run Code Online (Sandbox Code Playgroud)

在工作区属性中也很常见通配符,例如

  "workspaces": [
    "packages/*"
  ]
Run Code Online (Sandbox Code Playgroud)

动机

我更喜欢避免使用 npm 依赖版本的通配符。

使用0.0.0是有效的,如果您喜欢这种约定,它隐式表示该包未在任何注册表上发布。此外,如果您考虑在 npm 上发布一些内部包,使用这种方法可以很好地扩展。

我明确列出了工作区,这是少数原因,因为我进行了检查工作区之间一致性的测试,因此可以更轻松地从根 package.json 读取工作区并对其执行某些操作,而不是打开目录并查找工作区文件夹。