0

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

我的主文件在 require 中加载,如下所示:

<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& lib/main.js,它没有找到 Backbone、jQuery 等。如果 config 包含在与 main 相同的文件中,这一切都可以正常工作,但是将它们分开的重点是让我不必维护我的测试运行器的不同配置。

任何建议将不胜感激。

4

2 回答 2

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>

但是对于优化器,我必须将配置加载为模块:例如

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

我无法嵌套要求工作,所以这是我想出的解决方案。为未来的 Google 员工发布此信息。

于 2013-10-20T14:09:14.317 回答
0

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

于 2017-07-19T16:51:34.353 回答