使用本地项目的"npm install"意外行为

チーズ*_*ズパン 7 npm npm-link

脚本

  • 我在用 npm 5.8.0
  • 我有一个ProjectA和一个ProjectB
  • ProjectB 是一种依赖 ProjectA
  • 这两个项目都捆绑在一起并通过Webpack运行(如果需要,我可以提供我的配置).

出于开发目的,我ProjectBProjectA的package.json中引用了"projectB": "file:../projectB".基本上我需要的唯一文件是在libWebpack的输出文件夹中.

问题

如果我使用上面的配置安装此依赖项,npm将把整个文件ProjectB夹安装到node_modules中.它将包含所有projectB的node_modules,配置文件,src文件夹等.

除了这不能成为预期的行为之外,这会导致错误.例如,某些已安装的@types会抛出错误,因为它们被视为重复.@types和其他包来自ProjectAProjectB似乎"碰撞".这些软件包是作为参考的"dependencies"两个ProjectAProjectB居多.

我尝试了什么

npm链接

如果我使用npm链接,则会出现相同的(见上文)行为.整个文件夹将安装到ProjectAnode_modules中.

npm包

我实际上有一个-file 可能很重要.所以,当我使用一个文件生成.如果我然后通过一切正常安装.我认为这确实考虑了-file..npmignoreProjectBnpm packprojectB.tgzProjectB"projectB": "file:../projectB.tgz"npm pack.npmignore

我对这个解决方案的问题在于,我不仅需要在ProjectB每次应用更改时进行构建,而且还需要构建npm pack.

删除ProjectBnode_modules

我想这是最愚蠢的解决方法.如果我再次引用ProjectBvia "projectB": "file:../projectB"但在构建之后删除它的node_modules,则它们在安装后不会出现.因此,我没有任何例外.

我想这不是一个有效的解决方案,因为仍然ProjectB安装整个文件夹.

这里的最佳做法是什么?什么是合理的constallation ProjectAProjectB以安装ProjectB从本地源?

Wou*_*rgh 0

您可以尝试将以下代码放入projectB的package.json文件中吗?

"files": [
    "lib/*"
]
Run Code Online (Sandbox Code Playgroud)

这应该告诉任何 npm install 仅使用数组中指定的文件。显然,您可以使用更多条目来扩展它们。请参阅文档了解更多详细信息