使用WebPack加载内部模块属性



我正在将一个旧的Dojo Toolkit应用程序移植到较新的技术(Vue.js和WebPack(。

我的场景是

这些新模块应该与旧的Dojo加载器或新的WebPack加载器一起使用。我能够删除大多数dojo依赖项,但我仍然需要为新组件使用插件dojo/text(以字符串形式加载html文件(和dojo/i18n(基于区域设置加载模块(。

这些组件是在WebPack应用程序上进行原型化的,但在生产中,它仍将使用DojoLoader,直到所有Dojo依赖项都被删除。

我能够配置WebPack在使用dojo/text时加载HTML,在使用dojo/i18n时使用默认语言:

plugins: [
new webpack.NormalModuleReplacementPlugin(/^dojo/text!/, function(data) {
data.request = data.request.replace(/^dojo/text!/, '!html-loader!');
}),
new webpack.NormalModuleReplacementPlugin(/^dojo/i18n!/, function(data) {
data.request = data.request.replace(/^dojo/i18n!/, '');
})
]

问题

默认语言的典型i18nDojo模块是:

define({
root: {
placeholder: 'Name'
},
es: true,
pt: true
});

Dojo加载程序只获取root属性作为模块结果:

define({
placeholder: 'Name'
});

问题是

我可以使用现有的加载程序或插件加载一个模块,解析或评估它,然后只返回根属性作为结果吗?

制作此模块:

define({
root: {
placeholder: 'Name'
},
es: true,
pt: true
});

转化为

define({
placeholder: 'Name'
});

对于这个用例,可以编写自定义加载程序,加载程序的源代码是:

module.exports = function(source) {
return 'module.exports = ' + JSON.stringify(eval('function define(x) { return x; }; ' + source).root);
};

并且您必须包括使用NormalModuleReplacementPlugin添加加载程序:

new webpack.NormalModuleReplacementPlugin(/^dojo/i18n!/, function(data) {
data.request = data.request.replace(/^dojo/i18n!/, '!dojo-i18n!');
})

最新更新