在我们的项目中,我们使用 require.js 来定义模块。该网络项目还提供多语言支持。对于这种情况,我们使用 require.js 包 i18n。一切正常,直到使用 r.js 进行优化。
在 main.js 文件中,我们定义了以下代码行
config: {
i18n: {
locale: localStorage.getItem('locale') || 'de-de'
}
}
因此用户可以切换语言。在代码的某处,我们有:
'click .lang-selection' : function(ev){
localStorage.setItem('locale',$(ev.currentTarget).attr('data-language'));
location.reload();
}
但是当涉及到 r.js 的优化部分时,就会出现问题。
错误:错误:mainConfigFile /home/ch/html5-app/src/web/main.js 中的配置无法使用,因为在优化器中运行时无法正确评估它。尝试仅使用也是有效 JSON 的配置,或者不使用 mainConfigFile,而是将所需的配置值复制到构建文件或提供给优化器的命令行参数中。在 Function.createConfig (/home/ch/html5-app/bin/r.js:24283:23)
有人对此有解决方案,甚至有另一种方法吗?例如为每种语言构建一个自己的优化文件?
此外 js.build.js 文件
({
baseUrl: "../",
name: "src/web/main",
paths: {
// require.js
requirejs : 'vendor/backbone/require.215',
// app specific modules
root: 'src/web/app/js',
templates : 'src/web/app/templates',
// shared modules
shared: 'src/shared/app/js',
confighandler : 'src/shared/app/js/config/confighandler',
root_config : 'src/web/app/js/config/config',
layout: 'src/shared/app/js/views/layout',
general: 'src/shared/app/js/general',
helper: 'src/shared/app/js/helper',
session: 'src/shared/app/js/session',
vent: 'src/shared/app/js/vent',
view: 'src/shared/app/js/views',
model: 'src/shared/app/js/models',
module : 'src/shared/app/js/modules',
collection: 'src/shared/app/js/collections',
nls : 'empty:',
facebookSDK: 'empty:'
},
mainConfigFile: '../src/web/main.js',
preserveLicenseComments: false,
stubModules : ['text'],
inlineText: true,
// optimize: 'none',
include: ['requirejs']
})