这似乎是grunt
的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']);
};
但这是多余的!
尝试避免冗余
我想做类似的事情:
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']);
};