Grunt要求无法按预期创建多个模块

时间:2017-01-27 22:30:15

标签: javascript gruntjs requirejs require grunt-contrib-requirejs

我的结构如下:

  • 应用
    • 脚本
        • 的jquery.js
        • bootstrap.js
        • moment.js
      • app.js
      • vendor.js
      • common.js
      • app.config.js
      • main.js #require config

注意vendor.js只是一个包含libs下所有文件的文件。实施例

//vendor.js define(['jquery','bootstrap', 'moment'], function(){});

只列出依赖项:

  • app.js取决于common.jsapp.config.js
  • common.js取决于vendor.js
  • app.config.js取决于moment.js

我尝试做的是运行grunt requirejs命令创建一个vendor.js文件,其中包含libs/下的所有文件和app.js,其余文件不是包含在vendor.js

以下是我的requirejs选项:

module.exports = function (grunt) {
    'use strict';
    var config = {
        dist: {
            options: {
                appDir: 'app/',
                baseUrl: './scripts',
                mainConfigFile: 'app/scripts/main.js',
                dir: 'dist/scripts/',
                modules: [
                    { name: 'vendor'},
                    { name: 'app', exclude: ['vendor'] }
                ]
            }
        }
    };
    grunt.config('requirejs', config);
};

运行以上内容得到的是以下build.txt

scripts/vendor.js
----------------
scripts/libs/jquery.js
scripts/libs/bootstrap.js
scripts/libs/moment.js
scripts/app.js
scripts/vendor.js
scripts/common.js
scripts/app.config.js

scripts/app.js
----------------

正如您所看到的,所有文件都只是附加到vendor.js而不是app.js。我希望vendor.js包含vendor.js及其依赖项。并且app.js包含其他内容,因为vendor被排除在外。

我尝试了很多组合,但仍然是一个nogo。

1 个答案:

答案 0 :(得分:1)

发现问题!问题在于我的require配置文件是grunt requirejs任务的源。 require配置文件有deps: ['app']代码,在尝试拆分成模块时发生冲突,因为只要将require配置文件提供给grunt requirejs任务,它就会将app视为必要的依赖项,这意味着app及其所有文件被标记为依赖,因此包含在列出的第一个模块文件中。