如何引用Grunt文件中的部分以避免冗余?

时间:2015-07-19 11:27:16

标签: javascript gruntjs

这似乎是grunt的{​​{1}}特定问题,但它实际上适用于更通用的范围。

冗余配置

我有以下grunt-contrib-copy

Gruntfile.js

但这是多余的!

试图避免冗余

我想做点什么:

module.exports = function(grunt) {
  // Project configuration.
  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),

    copy: {
      examples: {
        cli: {
          files: [
            { src: ['src/client.js'], dest: 'examples/client.js' }
          ]
        },
        srv: {
          files: [
            { src: ['src/server.js'], dest: 'examples/server.js' }
          ]
        },
        all: { /* ATTENTION: Redundant part! */
          files: [
            { src: ['src/client.js'], dest: 'examples/client.js' },
            { src: ['src/server.js'], dest: 'examples/server.js' }
          ]
        }
      },
    },
  });

  grunt.loadNpmTasks('grunt-contrib-copy');

  grunt.registerTask('default', [...]);
  grunt.registerTask('build-examples', ['copy:examples']);
};

但这是不可能的。

这里的最佳做法是什么?感谢

1 个答案:

答案 0 :(得分:3)

请记住这是JavaScript代码,因此您可以在JavaScript代码中执行任何操作:

module.exports = function(grunt) {
  // Project configuration.
  var clientFiles = [
    { src: ['src/client.js'], dest: 'examples/client.js' }
  ];
  var serverFiles = [
    { src: ['src/server.js'], dest: 'examples/server.js' }
  ];
  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),

    copy: {
      examples: {
        cli: {
          files: clientFiles
        },
        srv: {
          files: serverFiles
        },
        all: {
          files: clientFiles.concat(serverFiles)
        }
      },
    },
  });

  grunt.loadNpmTasks('grunt-contrib-copy');

  grunt.registerTask('default', [...]);
  grunt.registerTask('build-examples', ['copy:examples']);
};