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

问题描述 投票:0回答:5

我有一个包含许多 npm 包的存储库,使用 npm 工作区

顶层

package.json
包含行:

  "workspaces": [
    "*"
  ]

当我运行

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

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

我不太确定该消息的含义 - 我认为“过滤器集”是

-w
选项,但工作区文件夹
some-package-name
肯定存在。

需要注意的是

some-package-name/package.json
包含 org 前缀,例如:

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

所以也许这就是原因。我无法将文件夹从

some-package-name
重命名为
@mycompany/some-package-name
,但我担心以
@
开头的目录可能会破坏内容。

该警告是什么意思以及如何解决?

node.js npm
5个回答
6
投票

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

@

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


3
投票

我最近在 monorepo 中遇到了同样的问题:原因是

package.json
中的项目名称(不带范围)与其存储的目录(子项目)名称不匹配。

如果 monorepo 的子项目存储在项目根目录中的

packages
目录中,并且根
package.json
包含

"workspaces": [
    "packages/*"
]

然后 npm 期望名为

@<scope>/project-name
的子项目位于目录
packages/project-name
中。


1
投票

我的答案略有不同。

我正在使用

package.json
以编程方式创建
Fs.writeFileSync('./path/to/package.json')

我立即运行

npm install -w=workspace foo bar
,但似乎这会失败有时; NPM 不知何故没有获取该文件,就好像我运行相同的命令两次一样,第二个总是有效。

使用

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

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


1
投票

我使用

file:
依赖项作为“npm 推荐”解决了这个问题(请参阅下文)。

实际上很多文章都说 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"
  }

0
投票

对我来说,当我使用turborepo使用monorepo时,我收到了这个警告/问题,使用命令-npx create-turbo@latest创建。

为什么我收到错误消息? => 因为我把nextjs项目的名字改了。但我没有更改 package.json 中的 name 属性。 当 name 属性更改为文件夹/包的名称时,问题得到解决。

参考下图: 查看包/项目的名称是 user-app,但在 package.json 中名称是“web”,将此名称编辑为 user-app。问题将会得到解决。

© www.soinside.com 2019 - 2024. All rights reserved.