Webpack:是否可以在编译时评估 javascript 表达式?
Webpack: Is it possible to evaluate javascript expression at compile time?
我正在尝试为我的项目设置 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 立即对其进行评估?
或者有人对我的问题有更好的解决方案?
您应该可以使用 Webpack 的 DefinePlugin
在编译时设置语言。
例如,您可以将要求写为:
var l10n = require('./lang/' + APPLICATION_LANGUAGE);
并且在您的配置中,
plugins: [
new webpack.DefinePlugin({
APPLICATION_LANGUAGE: JSON.stringify(lang)
})
]
您可以根据某些参数或环境变量等有条件地设置构建脚本 'lang'。
我正在尝试为我的项目设置 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 立即对其进行评估?
或者有人对我的问题有更好的解决方案?
您应该可以使用 Webpack 的 DefinePlugin
在编译时设置语言。
例如,您可以将要求写为:
var l10n = require('./lang/' + APPLICATION_LANGUAGE);
并且在您的配置中,
plugins: [
new webpack.DefinePlugin({
APPLICATION_LANGUAGE: JSON.stringify(lang)
})
]
您可以根据某些参数或环境变量等有条件地设置构建脚本 'lang'。