我有一个包含许多 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
,但我担心以 @
开头的目录可能会破坏内容。
该警告是什么意思以及如何解决?
我遇到了同样的问题,使用工作区包中配置的名称而不是文件夹名称为我解决了问题,即使有
@
。
npm install --workspace=@mycompany/some-package-name
我最近在 monorepo 中遇到了同样的问题:原因是
package.json
中的项目名称(不带范围)与其存储的目录(子项目)名称不匹配。
如果 monorepo 的子项目存储在项目根目录中的
packages
目录中,并且根 package.json
包含
"workspaces": [
"packages/*"
]
然后 npm 期望名为
@<scope>/project-name
的子项目位于目录 packages/project-name
中。
我的答案略有不同。
我正在使用
package.json
以编程方式创建 Fs.writeFileSync('./path/to/package.json')
。
我立即运行
npm install -w=workspace foo bar
,但似乎这会失败有时; NPM 不知何故没有获取该文件,就好像我运行相同的命令两次一样,第二个总是有效。
使用
setTimeout()
添加小延迟也可以,尽管我觉得不得不这样做有点肮脏;我不知道这是 Node 的问题还是我对 Node 进程生命周期缺乏了解。
无论如何,在这种情况下 - 并且代替更好的解决方案 - 它是有效的。
我使用
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"
}
对我来说,当我使用turborepo使用monorepo时,我收到了这个警告/问题,使用命令-npx create-turbo@latest创建。
为什么我收到错误消息? => 因为我把nextjs项目的名字改了。但我没有更改 package.json 中的 name 属性。 当 name 属性更改为文件夹/包的名称时,问题得到解决。
参考下图: 查看包/项目的名称是 user-app,但在 package.json 中名称是“web”,将此名称编辑为 user-app。问题将会得到解决。