Javascript 在Webpack 4中使用本地模块会多次绑定相同的依赖项

Javascript 在Webpack 4中使用本地模块会多次绑定相同的依赖项,javascript,webpack,bundling-and-minification,webpack-4,Javascript,Webpack,Bundling And Minification,Webpack 4,我正试图找到一种在npm中使用本地模块的好方法,或者一种构造大型应用程序的方法,以便将其捆绑到模块中,这些模块可能在单独的存储库中,也可能不在单独的存储库中 每个本地模块都有自己安装的package.json和依赖项 我的要求是,这些模块是用ES6编写的,并且只作为正在构建的主项目的一部分进行编译(因此,我不需要不断地独立构建很多依赖项) 项目结构 /root /main-module ... main js files <- entry point webpack.

我正试图找到一种在npm中使用本地模块的好方法,或者一种构造大型应用程序的方法,以便将其捆绑到模块中,这些模块可能在单独的存储库中,也可能不在单独的存储库中

每个本地模块都有自己安装的package.json和依赖项

我的要求是,这些模块是用ES6编写的,并且只作为正在构建的主项目的一部分进行编译(因此,我不需要不断地独立构建很多依赖项)

项目结构

/root
  /main-module 
    ... main js files <- entry point
    webpack.config.js
    package.json
  /module-1
    ... module 1 js files
    package.json
  /module-2
    ... module 2 js files
    package.json
  /module-3
    ... module 3 js files
    package.json
您可以在此处看到整个项目:

我使用的是带有babel loader的webpack,它不需要任何额外的设置就可以使用这个表单,甚至可以在模块文件完成后查看它们的更改和重建,这真是太神奇了

问题:构建完成后,lodash将被包含在构建包中4次,每个需要它的模块一次,即使它们都需要相同的版本,并且所有源代码都是同时编译的

  • 我尝试过使用splitChunkPlugin,但没有效果
  • 我曾尝试将lodash设置为本地模块中的DevDependence(这是我不想做的事情,但无论如何都不起作用)
有人能解决这个问题吗


或者以类似方式捆绑本地模块的另一种方式

将每个模块更改为具有lodash作为依赖项,而不是直接依赖项。因此,在
package.json
文件中,更改以下内容:

  "dependencies": {
    "lodash": "^4.17.5"
  }
致:


这会停止模块在本地工作吗?例如,要作为模块的一部分运行测试,它仍然需要引用lodash作为它自己的依赖项,而不是对等依赖项?我链接到了一篇nodejs博客文章,提供了更多详细信息。应该没问题。您可能必须手动安装对等依赖项(即如果使用npm>v2)。请参阅更新部分博客文章的底部:它似乎不起作用,我已将它们更改为对等依赖项。第一次尝试时,它仍然捆绑lodash 4次。删除所有node_模块文件夹并再次运行npm install后,没有安装node_模块(这可能是我想要的)。我收到以下错误:找不到模块:错误:无法解析“C:\code\local Module test\Module-1”中的“lodash”。似乎它仍在尝试将它们作为依赖项加载。在父项目中,您需要安装对等依赖项。当您在父级中安装npm时,您没有收到警告吗?我收到了,但理想情况下我不希望收到警告,因为我不能保证使用主repo中其他本地模块所需的模块,我正好在示例中。
  "dependencies": {
    "lodash": "^4.17.5"
  }
  "peerDependencies": {
    "lodash": "^4.17.5"
  }