Webpack:可以在编译时评估javascript表达式吗?

时间:2015-03-13 16:27:53

标签: javascript node.js bundling-and-minification webpack

我正在尝试为我的项目设置webpack。 该项目足够大,并以多种语言提供。 我希望每种语言的每个入口点都作为单独的文件提供。我的语言文件不仅仅是简单的JSON,而是JavaScript。所以i18n插件并不符合我的需求。

解决方案似乎与i18n插件类似:

var languages = ['en', 'fr', 'de'];
module.exports = languages.map(function (lang) {
  return {
    name: lang,
    // some other language-dependent config
  }
})

然后在我的一些脚本中,我想要使用环境变量:

来要求本地化文件
var lang = ...; // some environment variable, available only at compile time
var l10n = require('./lang/' + lang);

但是默认情况下,webpack会尝试将该表达式存储在括号中,并假设稍后在浏览器中对其进行评估。

那么有没有办法告诉webpack立即评估它?

或许有人可以更好地解决我的问题?

1 个答案:

答案 0 :(得分:10)

您应该能够使用Webpack的DefinePlugin在编译时设置语言。

例如,您可以将您的要求写为:

var l10n = require('./lang/' + APPLICATION_LANGUAGE);

并在您的配置中

plugins: [
  new webpack.DefinePlugin({
    APPLICATION_LANGUAGE: JSON.stringify(lang)
  })
]

您可以有条件地设置构建脚本' lang'基于某些参数或env变量或其他东西。