我经常想为浏览器捆绑一个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实例以使用其本地依赖项而不是项目的依赖项?
答案 0 :(得分:0)
我认为我已解决此问题,但我怀疑有更好的解决方案:
在生成的配置文件中,我必须使用指向bundle-module
目录中已安装模块的加载程序的绝对路径:
loader: path.join(__dirname, '../node_modules/babel-loader/lib/index.js')
(奇怪的是,即使package.json
中的babel-loader
指向lib/index.js
,自然地,这仅在指定了完整路径的情况下才起作用。
如果任何人有一个更明显,更简单的解决方案,我将不回答这个问题!