RequireJS优化器不从外部配置加载路径?

时间:2013-10-03 13:15:39

标签: javascript requirejs jasmine grunt-contrib-requirejs

我正在使用r.jsgrunt-contrib-requirejs并且到目前为止没有任何问题,直到我想将我的配置拆分为单独的文件,以便testem我的应用程序可以共享相同的配置。我没有遇到单独配置的任何问题,除非涉及到无法再找到路径的优化器。

我的主文件加载如下所示:

<script data-main="main" src="vendor/requirejs/require.js"></script>

在main.js中我有:

require(['config'], function() {
    'use strict';
    require(['backbone', 'jquery'], function( Backbone, $ ) {
        // ...
    });
});

在配置中我有:

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

我的Grunt任务看起来像这样:

compile : {
    options: {
        name: 'main',
        baseUrl: 'lib',
        mainConfigFile: 'lib/config.js',
        out: 'dist/js/master.js',
        optimizeAllPluginResources: true
    }
}

但所有r.js都可以找到lib/config.js&amp; lib/main.js,它没有找到Backbone,jQuery等。如果配置包含在与main相同的文件中,这一切都可以正常工作,但是将这些文件分开的全部意义在于我不需要维护我的测试跑步者的不同配置。

非常感谢任何建议。

2 个答案:

答案 0 :(得分:1)

几天前管理解决这个问题。现在使用Almond加载我优化的r.js构建,所以我使用这样的配置:

compile: {
    options: {
        name: 'vendor/almond/almond',
        baseUrl: 'lib',
        include: ['main'],
        insertRequire: ['main'],
        mainConfigFile: 'lib/config.js',
        out: 'dist/js/master.js',
        optimizeAllPluginResources: true,
        wrap: true
    }
}

对于开发版本,我必须将配置包含在我插入require.js的不同脚本中:

<script src="config.js"></script>

但对于优化器,我必须将config作为模块加载:例如

require(['backbone','jquery','config'], function( Backbone, $ ) {

我无法让嵌套需要工作,所以这就是我提出的解决方案。将此发布给未来的Google员工。

答案 1 :(得分:0)

我找到了一个更简单的解决方案。只需将 requirejs.config({})移动到单独的文件即可。在优化主文件之前,请将此配置文件附加到主文件中。例如,通过 gulp-append-prepend 插件。然后优化)