当优化器由grunt启动时,我得到了这个错误(我使用的是约曼骨干生成器)。
运行"requirejs:dist“任务错误: ReferenceError: window未定义
我使用的是请求和插件i18n。这是我的main.js
require.config({
//locale: "en",
shim: {
underscore: {
exports: '_'
},
backbone: {
deps: [
'underscore',
'jquery'
],
exports: 'Backbone'
},
'jquery-notify': {
deps: [
'jquery'
]
},
swiper: {
deps: [
'jquery'
],
exports: 'Swiper'
},
bstrapcollapse: {
deps: [
'jquery',
'bstraptransition'
],
exports: 'collapse',
}
},
paths: {
jquery: '../bower_components/jquery/jquery',
backbone: '../bower_components/backbone-amd/backbone',
underscore: '../bower_components/underscore-amd/underscore',
i18n: '../bower_components/requirejs-i18n/i18n',
'backbone.marionette': '../bower_components/backbone.marionette/lib/core/amd/backbone.marionette',
'backbone.wreqr': '../bower_components/backbone.wreqr/lib/amd/backbone.wreqr',
'backbone.babysitter': '../bower_components/backbone.babysitter/lib/amd/backbone.babysitter',
'jquery-ui': '../bower_components/jquery-ui/ui/jquery-ui',
loglevel: '../bower_components/loglevel/dist/loglevel.min',
moment: '../bower_components/moment/moment',
alertify: '../bower_components/alertify/alertify',
swiper: '../bower_components/swiper/dist/idangerous.swiper-2.0.min',
fastclick: '../bower_components/fastclick/lib/fastclick',
bstrapcollapse: '../bower_components/sass-bootstrap/js/bootstrap-collapse',
bstraptransition: '../bower_components/sass-bootstrap/js/bootstrap-transition',
'requirejs-text': '../bower_components/requirejs-text/text',
async: '../bower_components/requirejs-plugins/src/async',
},
config: {
i18n: {
locale: JSON.parse(window.localStorage.getItem('settings')).language || 'en',
}
}
});我需要根据用户输入改变语言,这就是为什么我需要获取localStorage并在配置中设置区域设置。
有解决办法吗?谢谢。
发布于 2013-08-06 13:52:09
在运行时javascript方面,我没有做太多工作,但我知道很多您知道并习惯于浏览器(文档对象模型的"getElementById",本地存储)的库在运行时(如Grunt或Rhino )中是不可用的。在该设置文件中使用localStorage似乎是问题所在。
相反,您需要使用提供给您的任何API。例如,快速搜索发现了一些Grunt示例,它们在这些示例中读取/写入文件系统上的文件:http://gruntjs.com/sample-gruntfile
显然,这在浏览器中是不可能的,因为浏览器不允许您访问文件;但是您最好在Grunt中利用它。您还可以使用这样的子句来检测您所处的模式:
if (window) {
...
}
else if (grunt) {
...
}发布于 2014-09-10 13:28:42
一个对我有用的解决办法:
config: {
i18n: {
locale: (function(){
try{
return localStorage.getItem('locale') || 'en' ;
}catch(ex){
return 'en';
}
})()
}
}但还是不相信这个诡计。也许其他人有更好的主意?
https://stackoverflow.com/questions/18081807
复制相似问题