遍历所有子目录,动态创建grunt transport任务
场景在grunt-cmd-transport的GitHub官网提了issue#55:是否支持遍历子目录,提取出变量用于配置,不过没有得到回答,今天只好自己摸索了一个办法,在此记录一下
普通的transport配置一般是这样的:
webapps是作为源码目录,同时也是开发阶段的seajs base(顶级标识从这里开始找)。下面每个模块是一个子目录,如果模块包含子模块,则有更深的一级子目录。在最终的模块下,有service,static,test,分别代表后端代码,前端代码,测试代码。static里又分为css,html,以及直接存放js
解决思路总的思路是遍历所有子目录。提取出目录的path,然后创建新的transport target,配置参数并运行。本质上还是多个target,但是target不是静态写在Gruntfile里,而是根据遍历的结果动态创建的
但是还有一个问题,就是有些子目录是不希望grunt去扫描的,比如test,css,html等。那么遍历的时候就有2种做法,一种是直接只扫描参与构建的目录,另一种是扫描所有的目录,然后排除掉不要的。第一种方法当然是更好的,不过一时没想到该怎么做,或许用node glob module可以做到,有兴趣的朋友可以自行尝试优化一下。最终我选择的是第二种办法
Gruntfilegrunt.config.set('transport.build.options.idleading', item + '/');grunt.config.set('transport.build.files', [ { cwd: 'webapps/' + item, src: '*.js', dest: '.build/' + item }]);grunt.task.run('transport:build');
这样就只有一个叫作'build'的target,只是同一个target配置了N次(只有最后一次生效),所以只会反复构建同一个目录