我有这三个本地 npm 包:C:\projects\A
、C:\projects\B
和 C:\projects\main
。 Main
是使用 Webpack 构建的 React 应用程序。 Main
依赖于A
和B
,同时A
依赖于B
。我们有自己的“全局”包管理器,它保证包将位于同一父文件夹中。
我想适合这些:
Node(和 webpack)的
require
将解析本地包每次更改
A
或B
时,我都不需要在Main
中npm install
>
我在 Main
的 package.json
中做了这个:
....
"dependencies": {
"A": "file:../A",
"B": "file:../B",
"react": ...
.........
但是遇到了一个奇怪的问题:npm
并没有在A
和B
的node_modules 中安装所有的包,所以Webpack build失败。我每次都需要运行 npm install
。
我用谷歌搜索并找到了 linklocal ,它将所有本地包替换为符号链接(symbolic link)。但是遇到了另一个问题:
linklocal does not install dependencies of linked dependencies, as such you typically end up installing dependencies of linked dependencies twice: once during npm install, then again after linklocal
所以我在 postinstall
脚本中再次运行了 linklocal
和 npm install
。但是 npm@3 没有对符号链接(symbolic link)文件夹做任何事情:
npm WARN update-linked node_modules/A needs updating to 1.0.0 from 1.0.0 but we can't, as it's a symlink
然后我决定修改 postinstall
以转到每个符号链接(symbolic link)模块并从那里运行 npm install
。乍一看它是有效的:安装运行良好,以及 webpack 绑定(bind)。但是 Webpack 开始捆绑 React 的两个副本(这是被禁止的)。
如何正确配置我的包?
最佳答案
在包 A 和包 B 中,您可以有一个执行 webpack 的preinstall 脚本。这应该解决所有的依赖关系。
在您的主包上,您应该链接到包 A 和 B 的 dist(build) 文件夹。
还要检查这个库 wml ,它可以帮助您保持本地依赖项的同步。
package.json:
“脚本”:{
“预安装”:“网络包”
}
关于node.js - 正确配置依赖于本地包的NPM包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40161607/