设想
npm 5.8.0
ProjectA
和ProjectB
ProjectB
是ProjectA
的依赖项出于开发目的,我通过
ProjectB
引用了ProjectA
的package.json中的"projectB": "file:../projectB"
。基本上,我只需要在Webpack的输出lib
文件夹中找到文件。问题
如果我使用上面的配置安装此依赖性,npm会将整个
ProjectB
-folder安装到node_modules中。它将包含projectB
的node_modules,配置文件,src文件夹等所有内容。除了这不是预期的行为外,还会导致错误。例如,某些已安装的@types将引发错误,因为它们被视为重复项。 @types和
ProjectA
和ProjectB
中的其他软件包似乎“冲突”。这些软件包大多在"dependencies"
和ProjectA
中都被称为ProjectB
。我尝试了什么
npm连结
如果我使用npm link,则会出现相同的行为(见上文)。整个文件夹将被安装到
ProjectA
的node_modules中。npm包
我实际上确实在
.npmignore
中有一个ProjectB
-文件,这可能是重要的。因此,当我使用npm pack
时,会生成一个projectB.tgz
文件。如果我随后通过ProjectB
安装"projectB": "file:../projectB.tgz"
,则一切正常。我假设npm pack
确实考虑了.npmignore
-file。这个解决方案的问题是,我不仅必须在每次应用更改时都构建
ProjectB
,还需要对其进行npm pack
。删除
ProjectB
的node_modules我猜这是最愚蠢的解决方法。如果我再次通过
ProjectB
引用了"projectB": "file:../projectB"
,但在构建后删除了它的node_modules,则它们在安装后不会出现。因此,我再也没有异常(exception)了。我猜这不是一个有效的解决方案,因为仍然安装了整个
ProjectB
-folder。问题
这里的最佳做法是什么?为了从本地源安装
ProjectA
,对ProjectB
和ProjectB
的合理构想是什么? 最佳答案
如果projectA
需要projectB/lib
中的文件,则可以按以下方式配置webpack的resolver(假设为webpack 4):
resolve {
alias: "projectB": "projectB/lib"
}
如果
projectB
是一个模块,则它的package.json
应该包括相应的入口点(请参阅this page)。我还建议您尝试使用yarn而不是npm进行软件包管理。 Yarn的workspaces功能旨在与多个相互依赖的程序包一起使用。
关于npm - 本地项目的 `npm install`出现异常行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49597204/