Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gruntjs grunt.file.copy排除空文件夹_Gruntjs_Copy_Directory - Fatal编程技术网

Gruntjs grunt.file.copy排除空文件夹

Gruntjs grunt.file.copy排除空文件夹,gruntjs,copy,directory,Gruntjs,Copy,Directory,file.copy(实际上是grunt配置副本,但它在下面使用grunt.file.copy)。这对我来说很好,但我排除了某些全局模式。此排除会导致一些空文件夹,并且这些文件夹仍会复制到新集合。有没有办法排除空文件夹? 谢谢 雷夫 这是我的艰巨任务 copy: { release: { expand: true, deleteEmptyFolders:true,

file.copy(实际上是grunt配置副本,但它在下面使用grunt.file.copy)。这对我来说很好,但我排除了某些全局模式。此排除会导致一些空文件夹,并且这些文件夹仍会复制到新集合。有没有办法排除空文件夹? 谢谢 雷夫

这是我的艰巨任务

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
              }
            }              
    }
copy:{
发布:{
是的,
deleteEmptyFolders:true,
cwd:“”,
src:['**',
“!**/obj/**”,
“!***/.cs”,
“!***/.vb”,
“!***/.csproj”,
“!***/*.csproj.*”
],
目标:'',
过滤器:函数(文件路径){
var val=!grunt.file.isDir(文件路径)| | require('fs').readdirSync(文件路径).length>0;
grunt.log.write(val);
返回值
}
}              
}
日志显示返回了一些错误值,但我的desFolder中仍有几个空文件夹。

UPDATE 我做了一个呼噜呼噜的发明副本,但@shama想出了一个更好的解决方案

您现在可以使用过滤器在所有grunt任务中处理此问题:

复制:{
主要内容:{
src:'lib/***',
dest:'dist/',
过滤器:函数(文件路径){
return!grunt.file.isDir(文件路径)| | require('fs').readdirSync(文件路径).length>0;
},
},
},
您案例中的问题是,这些文件夹不是空的,只是被排除在外

一个好的解决方案是使用grunt contrib copy,然后使用grunt contrib clean:

module.exports=函数(grunt){
grunt.loadNpmTasks(“grunt-contrib-clean”);
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.initConfig({
副本:{
主要内容:{
是的,
cwd:‘src’,
src:['**','!***/*.js'],
dest:'dist/'
}
},
清洁:{
主要内容:{
src:['*/**'],
过滤器:功能(fp){
返回grunt.file.isDir(fp)和&require('fs').readdirSync(fp).length==0;
}
}
}
});
registerTask('copyclean',['copy:main','clean:main']);
};

事实上,它是对的,只是变得模糊。我刚刚意识到那些文件夹不是空的。@IlanFrumer我很抱歉我没有遵循。我更新了我的解决方案。我会看看这一点。这似乎有道理,但我已经被拉去做其他事情。我可能已经做了?等我回来为你做了。谢谢,a)太棒了,谢谢你的超快转身。b) 如何获取此版本的grunt contrib副本?我目前在project.json文件中有“~0.5.0”。我想既然你刚刚这么做了,我应该更新那个版本?我的PR被拒绝了,因为grunt内置了过滤所有插件的文件和文件夹的支持。只需复制更新后的代码段,就可以开始了。奇怪的是,这似乎不起作用。我会更新我的?谢谢你的帮助。我认为第一个解决方案的作用是它查看源文件,而不是目标文件。源有文件,但复制的只是空文件夹,因为这些文件被过滤掉了。因此,源有文件,因此被复制,而目标没有,因此被吸收。无论如何,我也想到了你的第二个解决方案,我正在使用一个名为grunt cleanempty的包,它可以工作,我只是希望在一个任务中完成它。再次感谢你的帮助。