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

How can I reference a section in Grunt file to avoid redundancy?

这可能看起来像是 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']);
};