使用WebPack加载内部模块属性

时间:2018-08-01 18:00:36

标签: javascript webpack dojo webpack-loader

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

我的情况是...

这些新模块应与旧的Dojo加载程序或新的WebPack加载程序一起使用。我能够删除大多数dojo依赖项,但是我仍然需要为新组件使用插件dojo / text(将html文件作为字符串加载)和dojo / i18n(根据语言环境加载模块)插件。 / p>

这些组件已在WebPack应用程序上进行原型设计,但在生产中仍将使用Dojo Loader util删除所有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!/, '');
  })
]

问题...

用于默认语言的典型i18n Dojo模块是:

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

Dojo加载器仅获得 root 属性作为模块结果:

define({
  placeholder: 'Name'
});

问题是...

我可以使用现有的加载器或插件来加载,解析或评估它并仅返回根属性吗?

制作此模块:

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

被转化为

define({
  placeholder: 'Name'
});

1 个答案:

答案 0 :(得分:0)

在这种情况下,可以编写一个自定义加载程序,该加载程序的源代码为:

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!');
})