【问题标题】:Webpack: Is it possible to evaluate javascript expression at compile time?Webpack:是否可以在编译时评估 javascript 表达式?
【发布时间】:2015-05-16 05:37:54
【问题描述】:

我正在尝试为我的项目设置 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 立即评估呢?

或者也许有人对我的问题有更好的解决方案?

【问题讨论】:

  • 也许您正在寻找像 Grunt 这样的构建工具?
  • 任务运行器如何帮助解决这个问题?
  • 听起来您想遍历一些 Javascript 数据结构并基于该迭代创建单独的构建。一个可编程的构建工具,它可以读取 JSON 文件,并且可以编程为几乎任何听起来它都可以做到的事情。只是想帮忙。
  • @jfriend00 感谢您的帮助。是的,问题是项目包含很多本地化文件,但入口点很少。因此,一个工具应该知道根据项目代码库中的 require 函数调用在哪里加载哪个本地化文件。将尝试更深入地编写 webpack 插件和加载器。再次感谢:)
  • 既然你说语言是在编译时,你的意思是你想基本上为你的主要空点创建不同的版本,每种语言都有一个?

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


【解决方案1】:

你应该可以使用 Webpack 的 DefinePlugin 在编译时设置语言。

例如,你可以将你的需求写成:

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

在你的配置中,有

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

您可以让您的构建脚本根据某些参数或环境变量或其他东西有条件地设置“lang”。

【讨论】:

  • 太棒了!不知道我怎么错过了这个。你救了我的周末)))
  • 不错的简单解决方案:+1:
猜你喜欢
  • 1970-01-01
  • 2016-11-11
  • 2012-12-26
  • 2014-06-16
  • 1970-01-01
  • 1970-01-01
  • 2010-09-09
  • 1970-01-01
  • 2017-05-05
相关资源
最近更新 更多