【问题标题】:requirejs + backbonejs + optimizer = backbone undefinedrequirejs + 骨干js + 优化器 = 骨干未定义
【发布时间】:2013-03-07 19:42:09
【问题描述】:

在 indexview 模块中没有调用 Backbone。

使用requirejs 2.1.5/2.1.4 和backbonejs 0.9.10

运行 r.js 后的 main.js

...
// this is causing the backbone to return 
// null/undefined in the next define call below
define("backbone", function(){}); 

define('views/index/IndexView', [
    'underscore',
    'backbone',
    'text!templates/index/indexTemplate.html'  
], function(_, Backbone, indexTemplate){

    console.log(Backbone); // returns undefined
    var IndexView = Backbone.View.extend({
...

但是如果我取出第一个将主干注册为模块的定义调用,一切 工作正常。但是backbone-min.js 是单独加载的。但目前这是唯一的方法 使脚本运行。我肯定在这里遗漏了一些东西。

ma​​in.js

require.config({
    paths: {
        underscore  : 'libs/underscore/underscore-min',
        backbone    : 'libs/backbone/backbone-min'
        templates   : '../templates'
    },
    shim: {        
        'backbone': {
            deps: ['jquery','underscore'],
            exports: 'Backbone'
        }
    }
});

require(['app'], function(App){
    App.initialize();
});

build.js

({
    appDir: "../",
    baseUrl: "js",
    dir: "../../build",
    optimize: "none",
    paths: {
        "jquery": "libs/requirejs/require-jquery",
        "underscore" : 'libs/underscore/underscore-min',
        "backbone": 'libs/backbone/backbone-min',
        "templates": '../templates',
    },
    modules: [
        {
            name: "main",
            exclude: ["jquery"]
        }
    ]    
})

我的脚还在被骨干和 requirejs 弄湿。 非常感谢任何反馈。

【问题讨论】:

  • 它必须在您的配置中。在我的构建中,require 块看起来像这样:define("backbone", ["jquery","underscore"], (function (global) { return function () { var ret, fn; return ret || global.Backbone ; }; }(这)));请注意,我的 shim.js 中也有下划线
  • 您能否将mainConfigFile 添加到您的build.js 文件中,如下所示:mainConfigFile: 'app/main.js' 然后重新构建?

标签: backbone.js requirejs


【解决方案1】:

首先,你不需要那个define('backbone',...)。无论如何,那部分是什么?您不需要将 Backbone 定义为模块。 Requirejs 的工作是让 Backbone 可供您在整个框架中使用。正如您在代码中看到的,通过调用 Backbone.View.extend(),Backbone 已经存在。如果你想检查它,不要使用console.log,而是使用console.dir。在 chrome 检查器中,它可以很好地格式化输出。

其次,将下划线添加到 shim 中的主干 deps 数组。

【讨论】:

  • define('backbone',...) 由优化器脚本自动生成。这也是我在 requirejs 网站上的 require-jquery 教程中注意到的。
  • 另外,下划线已在我的 shim 中注册为依赖项。
【解决方案2】:

我刚刚遇到了这个问题,您需要将 main.js 中的“shim”添加到 build.js 文件中,它会像魅力一样工作;)

【讨论】:

    猜你喜欢
    • 2012-07-17
    • 2015-02-26
    • 2015-08-22
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多