1

我正在我的grunt concat一个项目上运行一项任务,它看起来像这样:

/**
 * Concatenate | Dependencies Scripts
 */

concat: {
    dependencies: {
        files: {        
            "./Ditcoop/js/plugins.min.js": ["./Ditcoop/js/vendor/**/*.min.js", "!./Ditcoop/js/vendor/modernizr/*.js", "!./Ditcoop/js/vendor/jquery/*.js"],
            "./Global/js/plugins.min.js": ["./Global/js/vendor/**/*.min.js", "!./Global/js/vendor/modernizr/*.js", "!./Global/js/vendor/jquery/*.js"],
            "./Webshop/js/plugins.min.js": ["./Webshop/js/vendor/**/*.min.js", "!./Webshop/js/vendor/modernizr/*.js", "!./Webshop/js/vendor/jquery/*.js"]
        }
    }
}

我的问题是,我是否可以在不必指定每个根文件夹的情况下以某种方式使其更具动态性。我在想这样的事情:

    concat: {
    dependencies: {
        files: {        
            "./*/js/plugins.min.js": ["./*/js/vendor/**/*.min.js", "!./*/js/vendor/modernizr/*.js", "!./*/js/vendor/jquery/*.js"],
        }
    }
}

我很确定我不能这样做,但我可以使用该expand选项,我只是不确定如何使用它,所以我可以在正确的根文件夹下这样做,所以我不会创建相同的目的地文件与我运行 concat 一样多次。

4

1 回答 1

3

永远记住 Gruntfiles 是 javascript :)

grunt.initConfig({
  concat: {
    dependencies: {
      files: (function() {
        var files = Object.create(null);
        grunt.file.expand({filter: 'isDirectory'}, '*').forEach(function(dir) {
          files[dir + '/js/plugins.min.js'] = [
            dir + '/js/vendor/**/*.min.js',
            '!' + dir + '/js/vendor/modernizr/*.js',
            '!' + dir + '/js/vendor/jquery/*.js'
          ];
        });
        return files;
      }()),
    },
  },
});

但是,如果您的依赖处理逻辑如此复杂,您可能需要考虑使用模块加载器,例如 browserify 或 requirejs。concat 任务实际上只是用于将简单文件连接在一起。

于 2013-08-01T16:44:50.587 回答