我想对开源JavaScript库进行更改。使用webpack和npm并保持本地的一切,我有什么选择来更改本地模块并将其导入项目代替从注册表下载的公共npm模块?本地模块和消费应用程序也将在两个单独的git存储库下进行源代码控制。
我正在Aurelia应用程序中对此进行测试,但我认为这是一个webpack和npm问题。我有一个名为my-app的应用程序,它依赖于aurelia-binding。我希望对aurelia-binding进行本地更改,并将它们推送到GitHub中的fork。我的项目结构如下所示:
└───my-app
├───.git
├───dist
├───node_modules
│ └───aurelia-binding
| ├───.git
│ ├───dist
│ └───src
└───src
构建和运行时,一切都按预期工作。要对aurelia绑定进行更改并在my-app中测试它们,我需要安装它的依赖项并构建它。这导致了这样的结构:
└───my-app
├───dist
├───node_modules
│ └───aurelia-binding
| ├───.git
│ ├───dist
| ├───node_modules
| | └───dependencies...
│ └───src
└───src
在依赖项上安装node_modules时,webpack会在运行时抛出错误。该错误可能看起来像aurlia模块的问题,但我不相信这种情况。
Unhandled rejection Error: Error invoking SVGAnalyzer. Check the inner error for details.
------------------------------------------------
Inner Error:
Message: __WEBPACK_IMPORTED_MODULE_1_aurelia_pal__.a.createElement is not a function
我也尝试使用npm link
将我的应用程序克隆在my-app旁边,而不是in in但是得到了相同的结果。
答案 0 :(得分:1)
我在webpack.config.js中添加了以下内容,以便能够使用npm / yarn链接包。它强制webpack仅使用主node_modules而不是"最近的"来解析模块。的。
resolve: {
extensions: [".ts", ".js"],
symlinks: false,
modules: ["ClientApp", path.resolve('node_modules')],
}
Where" ClientApp"是我的aurelia应用程序所在的文件夹。 symlinks参数用于防止webpack将符号链接路径解析为绝对路径。
警告,使用此设置可以绕过npm版本检查,因此您负责链接兼容版本。