这似乎是gruntgrunt-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']);
};


但这是多余的!

尝试避免冗余

我想做类似的事情:

all: {
  files: examples.cli.files.concat(examples.srv.files)
}


但这是不可能的。

最佳做法是什么?谢谢

最佳答案

请记住,这是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']);
};

09-16 10:14