如何将Webpack配置文件定向到集中式依存关系

时间:2019-07-19 19:32:16

标签: javascript node.js webpack dependencies

我经常想为浏览器捆绑一个Node包,但是我对在每个项目目录中保留Webpack配置和所有依赖项感到非常厌倦。当每个项目都需要少量加载程序时,它将产生极大的膨胀:主要是Babel,CSS / SASS,* SV和HTML | EJS。

因此,我尝试编写一个名为'bundle-module'的模块,该模块可以在项目内部进行全局安装和调用,以在本地dist子目录中生成版本,并在必要时创建该子目录。当您传递所需的文件名时,我得到了该模块以成功生成带有输入和输出的绝对路径的配置文件,如下所示:

npm install -g wilson428/bundle-module

# cd /path/to/myproj
# assume myproj has an index.js with it's own 
# project-specific dependencies in package.json

bundle-module --name=myproj --entry=index.js

我认为这是可行的,但事实证明,当using the Webpack API to call the compilation process时,它将在本地node_modules中查找装载程序,这样我会收到此错误:

EntryModuleNotFoundError: Entry module not found:
Error: Can't resolve 'babel-loader' in '/path/to/myproj'

这正是我不需要想要的-每个项目都需要它自己的babel-loader和其他所有加载程序的副本。

因此,如果我可以用通俗易懂的语言与Webpack交流,我会说:“请先生或女士,当您寻找loader时,请查看被呼叫的目录,而不是目录

bundle-module软件包具有所有正确的加载程序和其他Webpack模块作为依赖项(也尝试过devDependencies)。我还尝试了“预先要求” babel-loader,但无济于事。

如何获取全局安装的Webpack实例以使用其本地依赖项而不是项目的依赖项?

1 个答案:

答案 0 :(得分:0)

认为我已解决此问题,但我怀疑有更好的解决方案:

在生成的配置文件中,我必须使用指向bundle-module目录中已安装模块的加载程序的绝对路径:

loader: path.join(__dirname, '../node_modules/babel-loader/lib/index.js')

(奇怪的是,即使package.json中的babel-loader指向lib/index.js,自然地,这仅在指定了完整路径的情况下才起作用。

如果任何人有一个更明显,更简单的解决方案,我将不回答这个问题!