node.js - 正确配置依赖于本地包的NPM包

标签 node.js npm webpack symlink npm-install

我有这三个本地 npm 包:C:\projects\AC:\projects\BC:\projects\mainMain 是使用 Webpack 构建的 React 应用程序。 Main依赖于AB,同时A依赖于B。我们有自己的“全局”包管理器,它保证包将位于同一父文件夹中。

我想适合这些:

  1. Node(和 webpack)的 require 将解析本地包

  2. 每次更改 AB 时,我都不需要在 Mainnpm install >

我在 Mainpackage.json 中做了这个:

....
"dependencies": {
    "A": "file:../A",
    "B": "file:../B",
    "react": ...
    .........

但是遇到了一个奇怪的问题:npm 并没有在AB 的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 脚本中再次运行了 linklocalnpm 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 中,您可以有一个执行 webpackpreinstall 脚本。这应该解决所有的依赖关系。
在您的主包上,您应该链接到包 A 和 B 的 dist(build) 文件夹。
还要检查这个库 wml ,它可以帮助您保持本地依赖项的同步。

package.json:

“脚本”:{ “预安装”:“网络包” }

关于node.js - 正确配置依赖于本地包的NPM包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40161607/

相关文章:

node.js - 安装塔 npm 失败

typescript - 间接引用远程 Javascript URL

javascript - Webpack 产品构建因 ReferenceError 失败

node.js - webpack 捆绑针对 node.js 的代码

javascript - 我正在使用 create-react-app,我需要在没有服务器的情况下直接在浏览器中打开 build/index.html

javascript - 如何选择具有自定义文件结尾的任意层深度的所有文件夹和子文件夹?

javascript - 嵌套 promise

node.js - 在 Electron.js 中使用 fs 移动文件

node.js - nodejs sequelize 加载嵌套模型

webpack - Polymer 3 + Webpack -> 没有 'new' 就无法调用 PolymerElement