我有一个基于Webpack的JavaScript框架。在那里,我想通过Webpack配置中的自定义条件导入(或不导入)任意模块(具有默认导出的自定义函数的JavaScript文件):
// in webpack.customSettings.js
module.exports = {
const customJsFilePath = 'path/to/custom/js/file';
// alternatively, if no import is desired:
// const customJsFilePath = null;
};
// in webpack.config.js
const settings = require('./webpack.customSettings.js');
// ...
new webpack.DefinePlugin({
'process.env': {
PATH: JSON.stringify(settings.customJsFilePath || ''),
},
});
这确定了在Webpack构建过程中是否需要以及需要哪个自定义模块。因此,像下面这样的动态导入似乎是不必要的,并且效率不高,因为路径已经在运行时修复,我不想在运行时动态加载额外的文件(块):
// somewhere in my main index.js
if (process.env.PATH) {
import(`${process.env.PATH}/index.js`).then((module) => {
const myFunc = module.default;
// ...
});
}
我希望Webpack在我的捆绑包中包含直接的自定义文件。这样的事情:
// somewhere in my main index.js
const myFunc = awesomeGlobal.customFunc;
if (myFunc) {
// ...
}
我知道以下不适用:
// in my main index.js
import customFunc from `${process.env.PATH}/index.js`;
但我该怎么办?也许是Webpack中的东西?
答案 0 :(得分:1)
好的,我自己想出了解决方案。我使用Webpack ProvidePlugin有条件地提供模块:
// in webpack.customSettings.js
module.exports = {
const customJsFilePath = 'path/to/custom/js/file';
// alternatively, if no import is desired:
// const customJsFilePath = null;
};
// in webpack.config.js
const settings = require('./webpack.customSettings.js');
// ...
new webpack.ProvidePlugin((() => {
const addModules = {};
if (settings.customJsFilePath) {
addModules['window.myFunc'] = [settings.customJsFilePath, 'default'];
}
return addModules;
})()),
// in my main index.js
if (window.myFunc) {
window.myFunc();
}