file.copy(实际上是grunt-config-copy,但它下面使用了grunt.file.copy)。这对我来说很好,但我排除了某些glob模式。此排除导致一些空文件夹,文件夹仍然复制到新集。有没有办法排除空文件夹? 谢谢, RAIF
这是我的笨蛋任务
copy: {
release: {
expand: true,
deleteEmptyFolders:true,
cwd:'<%= srcFolder %>',
src: ['**',
'!**/obj/**',
'!**/*.cs',
'!**/*.vb',
'!**/*.csproj',
'!**/*.csproj.*'
],
dest: '<%= destFolder %>',
filter: function(filepath) {
var val = !grunt.file.isDir(filepath) || require('fs').readdirSync(filepath).length > 0;
grunt.log.write(val);
return val
}
}
}
日志显示返回了一些错误值,但我的desFolder中仍有几个空文件夹。
答案 0 :(得分:3)
我为grunt-contrib-copy制作了PR,但@shama提出了更好的解决方案。
您现在可以使用过滤器在所有grunt任务中处理此问题
copy: {
main: {
src: 'lib/**/*',
dest: 'dist/',
filter: function(filepath) {
return ! grunt.file.isDir(filepath) || require('fs').readdirSync(filepath).length > 0;
},
},
},
您的案例存在的问题是这些文件夹不是空的,只是被排除在外。
一个好的解决方案是使用grunt-contrib-copy然后使用grunt-contrib-clean:
module.exports = function(grunt) {
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.initConfig({
copy: {
main: {
expand: true,
cwd: 'src',
src: ['**', '!**/*.js'],
dest: 'dist/'
}
},
clean: {
main: {
src: ['*/**'],
filter: function(fp) {
return grunt.file.isDir(fp) && require('fs').readdirSync(fp).length === 0;
}
}
}
});
grunt.registerTask('copyclean', ['copy:main', 'clean:main']);
};