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

dch*_*tri 6 javascript require requirejs gruntjs 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

我正在试图做的是运行咕噜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);
};
Run Code Online (Sandbox Code Playgroud)

我从运行上面得到的是以下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
----------------
Run Code Online (Sandbox Code Playgroud)

如您所见,所有文件都只是附加到vendor.js而不是app.js.我希望vendor.js包含vendor.js它的依赖项.并排除app.js其余部分vendor.

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

dch*_*tri 1

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