grunt-contrib-concat:指定要连接的最后一个文件?

时间:2015-07-01 16:18:29

标签: javascript gruntjs grunt-contrib-concat load-order

我使用grunt-contrib-concat将所有自定义JS文件连接在一起,并用IIFE包装它们。我遇到了一些加载顺序问题(即我的init文件在某些​​模块之前执行,导致未定义的错误)。我想在concat命令中指定init.js应该是最后的,但我也不想指定所有其他JS文件的顺序,只是这个特定的文件最后一次。

这是我的concat的当前配置:

/**
 * Set project info
 */
project: {
  src: 'src',
  app: 'app',
  assets: '<%= project.app %>/assets',
  css: [
    '<%= project.src %>/scss/style.scss'
  ],
  js: [
    '<%= project.src %>/js/*.js'
  ]
},

concat: {
  dev: {
    files: {
      '<%= project.assets %>/js/scripts.min.js': '<%= project.js %>'
    }
  },
  options: {
    stripBanners: true,
    nonull: true,
    banner: ';(function($, window, document, undefined){ \n "use strict";',
    footer: '}(jQuery, window, document));'
  }
},

如何指定要连接的最后一个文件而不向我的项目添加额外的grunt模块

1 个答案:

答案 0 :(得分:1)

您可以通过连接所有文件 init.js,然后使用维护顺序的数组语法将结果与init.js连接来实现:

concat: {
    dev1: {
        dest: '<tmp>/concat1.js',
        src: ['<all your js>', '!init.js']
    },
    devFinal: {
        options: {
            stripBanners: true,
            nonull: true,
            banner: ';(function($, window, document, undefined){ \n "use strict";',
            footer: '}(jQuery, window, document));'
        },
        files: {
            dest: 'scripts.min.js',
            src: ['<tmp>/concat1.js', 'init.js']
        },
    },
}

然后连续调用两个目标:

grunt.registerTask('myConcat', ['concat:dev1', 'concat:devFinal']);