如何对使用
file:
中的 package.json
模式安装的本地 NPM 软件包进行 NPM 重复数据删除对等依赖项?使用公共注册表中的 npm install
安装软件包时,对等依赖项会正确地进行重复数据删除。
相关项目是一个Nest.js库,在NPM上发布为
@joonashak/nestjs-clone-bay
。它包含另一个 Nest.js 应用程序(位于 dev/
目录中)作为开发工具。开发应用程序的package.json
需要本地库,如下所示:
{
"dependencies": {
"nestjs-clone-bay": "file:../lib"
}
}
通过此设置,可以轻松地进行一些更改并通过重建库代码并重新启动开发应用程序来立即测试它们。但是,这似乎会导致库中包含的包被安装为重复项,而不是按应有的方式进行重复数据删除。
开发应用程序的peerDependencies
结果(请注意,
npm ls @nestjs/core
正下方的 @nestjs/[email protected]
依赖项未进行重复数据删除):nestjs-clone-bay@npm:@joonashak/[email protected] -> ./../lib
在像往常一样从 NPM 安装库的应用程序中执行相同命令的结果:
[email protected] /Users/joonas/code/nestjs-clone-bay/dev
├─┬ @joonashak/[email protected]
│ └── @nestjs/[email protected] deduped
├─┬ @nestjs/[email protected]
│ └── @nestjs/[email protected] deduped
├── @nestjs/[email protected]
├─┬ @nestjs/[email protected]
│ └── @nestjs/[email protected] deduped
├─┬ @nestjs/[email protected]
│ └── @nestjs/[email protected] deduped
├─┬ @nestjs/[email protected]
│ └── @nestjs/[email protected] deduped
├─┬ @nestjs/[email protected]
│ └── @nestjs/[email protected] deduped
└─┬ nestjs-clone-bay@npm:@joonashak/[email protected] -> ./../lib
├─┬ @joonashak/[email protected]
│ └── @nestjs/[email protected] deduped
├─┬ @nestjs/[email protected]
│ └── @nestjs/[email protected] deduped
├── @nestjs/[email protected]
├─┬ @nestjs/[email protected]
│ └── @nestjs/[email protected] deduped
├─┬ @nestjs/[email protected]
│ └── @nestjs/[email protected] deduped
├─┬ @nestjs/[email protected]
│ └── @nestjs/[email protected] deduped
└─┬ @nestjs/[email protected]
└── @nestjs/[email protected] deduped
npm i @joonashak/nestjs-clone-bay
下的
[email protected] /Users/joonas/code/space-major/server
├─┬ @joonashak/[email protected]
│ ├─┬ @nestjs/[email protected]
│ │ └── @nestjs/[email protected] deduped
│ └── @nestjs/[email protected] deduped
├─┬ @joonashak/[email protected]
│ └── @nestjs/[email protected] deduped
├─┬ @nestjs/[email protected]
│ └── @nestjs/[email protected] deduped
├── @nestjs/[email protected]
├─┬ @nestjs/[email protected]
│ └── @nestjs/[email protected] deduped
├─┬ @nestjs/[email protected]
│ └── @nestjs/[email protected] deduped
├─┬ @nestjs/[email protected]
│ └── @nestjs/[email protected] deduped
└─┬ @nestjs/[email protected]
└── @nestjs/[email protected] deduped
已按应有的方式进行了重复数据删除,并且一切正常(即应用程序中只有一个 Nest.js 实例)。
如何让 NPM 在包含本地版本的库时删除对等依赖项的重复数据? (虽然无论如何,拥有两个对等依赖项实例显然是错误的,但在这种特殊情况下,某些 Nest.js 功能在开发应用程序上完全中断,因为应用程序本身和库正在使用单独的 Nest.js 实例。)我找到了
@nestjs/[email protected]
@joonashak/[email protected]
安装该工具。install-local
安装本地lib并将其保存在npm i -D install-local
此外,我将启动脚本修改为
npx install-local -S ..lib
package.json
需要大约 30 秒才能完成,有时几乎是即时的。