首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未定义的需求窗口

未定义的需求窗口
EN

Stack Overflow用户
提问于 2013-08-06 13:36:38
回答 2查看 2K关注 0票数 2

当优化器由grunt启动时,我得到了这个错误(我使用的是约曼骨干生成器)。

运行"requirejs:dist“任务错误: ReferenceError: window未定义

我使用的是请求和插件i18n。这是我的main.js

代码语言:javascript
复制
    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并在配置中设置区域设置。

有解决办法吗?谢谢。

EN

回答 2

Stack Overflow用户

发布于 2013-08-06 13:52:09

在运行时javascript方面,我没有做太多工作,但我知道很多您知道并习惯于浏览器(文档对象模型的"getElementById",本地存储)的库在运行时(如Grunt或Rhino )中是不可用的。在该设置文件中使用localStorage似乎是问题所在。

相反,您需要使用提供给您的任何API。例如,快速搜索发现了一些Grunt示例,它们在这些示例中读取/写入文件系统上的文件:http://gruntjs.com/sample-gruntfile

显然,这在浏览器中是不可能的,因为浏览器不允许您访问文件;但是您最好在Grunt中利用它。您还可以使用这样的子句来检测您所处的模式:

代码语言:javascript
复制
if (window) {
  ...
}
else if (grunt) {
  ...
}
票数 0
EN

Stack Overflow用户

发布于 2014-09-10 13:28:42

一个对我有用的解决办法:

代码语言:javascript
复制
config: {
    i18n: {
        locale: (function(){              
            try{
                return localStorage.getItem('locale') || 'en' ;
            }catch(ex){
                return 'en';
            }
        })()
    }
}

但还是不相信这个诡计。也许其他人有更好的主意?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18081807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档