安装依赖本地.tgz包的Module A时NPM提示包找不到问题求助
问题原因
你在Module A的package.json里用file:./forked-packages/module-b.tgz声明依赖时,这个路径是相对于安装Module A的目标项目的本地文件系统,而非Module A包内部的路径。
哪怕你执行npm pack时,module-b.tgz已经被打包进Module A的tar包,但其他项目安装Module A时,npm会去目标项目的./forked-packages/module-b.tgz位置寻找文件,根本不会从Module A的包内读取该文件,所以必然会出现ENOENT路径不存在的错误。
解决方案
给你几个可行的处理方法:
- 把Module B发布到npm仓库(公共或私有均可),让Module A直接依赖它的版本号(比如
"module-b": "^1.0.0"),这样安装时npm会从仓库拉取依赖,不会再出现本地路径问题。 - 将Module B的代码直接放到Module A的目录下(比如
src/module-b),在Module A的代码中直接引用本地代码,同时删除package.json里的file:格式依赖。 - 使用npm的
bundledDependencies配置:在Module A的package.json中添加该字段并把module-b加入其中,npm打包时会将Module B的tgz一起打包进Module A的tar包,安装时直接从包内提取依赖,无需查找本地路径。配置示例:{ "name": "module-a", "dependencies": { "module-b": "file:./forked-packages/module-b.tgz" }, "bundledDependencies": ["module-b"] }
内容的提问来源于stack exchange,提问作者netishix
相关产品推荐
相关产品推荐

