requirejs:需要r.js优化文件

时间:2014-04-23 15:12:16

标签: javascript requirejs

我使用require.js构建了一个Web应用程序,并成功使用r.js将所有模块定义合并到一个文件中。

一旦创建了r.js优化文件,我希望能够独立地要求优化文件,但是在加载和定义模块后它无法执行任何代码:

require([
    'app1/optimizedAppFile'
], function (optimizedApp) {

    //optimizedApp is undefined, even though it loaded 
    //the file and executed the module definitions in debugger

});

通过在require.config.js中定义优化文件的顶级模块的路径来加载/实例化app是否合适,然后在main.js中要求它?即。

requirejs.config({

    paths: {
        'optimizedApp.topLevelModule' : 'app1/optimizedAppFile'
        //optimizedApp.topLevelModule is the full module name
        //app1/optimizedAppFile is the combined file from r.js
    }

});

1 个答案:

答案 0 :(得分:0)

是的,在通过rjs优化代码后,您可以只需要该文件。

但是,我今天也遇到了这个问题。经过几个小时的调试后,我发现当前的1.1.2骨干版本有一段代码检测AMD(功能"定义"存在)。

删除后,骨干看起来像这样

//     Backbone.js 1.1.2

//     (c) 2010-2014 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
//     Backbone may be freely distributed under the MIT license.
//     For all details and documentation:
//     http://backbonejs.org

(function(root, factory) {
  root.Backbone = factory(root, {}, root._, (root.jQuery || root.Zepto || root.ender ||     root.$));
}(this, function(root, Backbone, _, $) {

基本上我所做的就是让它全局可访问并为它添加垫片

 require.config({
  baseUrl: "/static/src/scripts/js",
  paths: {
    jquery: 'vendors/jquery/jquery',
    underscore: 'vendors/underscore/underscore',
    backbone: 'vendors/backbone/backbone',
    marionette: 'vendors/backbone/backbone.marionette'
  },
  shim: {
    jquery: {
      exports: "jQuery"
    },
    underscore: {
      exports: "_"
    },
    backbone: {
      deps: ['underscore', 'jquery'],
      exports: 'Backbone'
    },
    marionette: {
      deps: ['backbone'],
      exports: 'Marionette'
    }
  }
});

检查元素并检查您的控制台,看看它抱怨什么,然后转向优化 通过将rjs的optimize选项设置为false并查找它出错的部分。