npm 工作区“警告:过滤器集中的某些包名称,但不存在工作区文件夹”

我有一个包含许多 npm 包的仓库,使用 npm workspaces

顶级 package.json 包含以下行:

  "workspaces": [
    "*"
  ]

当我运行 npm i -ws 或其他 npm 命令时,我收到警告:

WARN: some-package-name in filter set, but no workspace folder present

我不太确定该消息的含义 - 我 think '过滤器集' 是 -w 选项,但工作区文件夹 some-package-name 肯定存在。

需要注意的是 some-package-name/package.json 包含一个 org 前缀,例如:

"name": "@mycompany/some-package-name",

所以也许这就是原因。我无法将文件夹从 some-package-name 重命名为 @mycompany/some-package-name 虽然我担心以 @ 开头的目录可能会破坏事情。

警告是什么意思,我该如何解决?

stack overflow npm workspaces "WARN: some-package-name in filter set, but no workspace folder present"
原文答案
author avatar

接受的答案

我遇到了同样的问题,使用工作区包中配置的名称而不是文件夹名称为我解决了这个问题,即使使用 @

npm install --workspace=@mycompany/some-package-name


答案:

作者头像

我使用“npm 推荐”的 file: 依赖项解决了这个问题(请阅读下文)。

实际上,许多文章都说 npm 建议使用 file: 来引用两个工作区包之间的依赖关系(然后他们经常使用星号),但老实说,我没有在 npm 文档中找到该提示,但它有效! ...至少它对我有用,使用以下

明确列出工作区

因此,例如,我没有使用星号

  "workspaces": [
    "packages/models",
    "packages/database",
    "webapp"
  ]

我还有一个作用域包名

例如

  "name": "@project/models",
  "private": "true"

我正在使用“文件:”依赖项

代替

  "dependencies": {
    "@project/models": "*"
  }

我用 file:WORKSPACE_PATH

  "dependencies": {
    "@project/models": "file:packages/models"
  }
作者头像

我有一个稍微不同的答案。

我正在使用 package.json 以编程方式创建 Fs.writeFileSync('./path/to/package.json')

我之后立即运行 npm install -w=workspace foo bar ,但似乎这失败了 sometimes ; NPM 不知何故没有收到文件,好像我两次运行相同的命令,第二次总是有效。

使用 setTimeout() 添加一个小的延迟也可以,虽然我觉得不得不这样做有点脏;我不知道这是 Node 的问题还是我对 Node 的进程生命周期缺乏了解。

无论如何,在这种情况下——并且代替更好的解决方案——它是有效的。