首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

遍历全部子目录,动态创建grunt transport任务

2013-10-28 
遍历所有子目录,动态创建grunt transport任务场景在grunt-cmd-transport的GitHub官网提了issue#55:是否支

遍历所有子目录,动态创建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可以做到,有兴趣的朋友可以自行尝试优化一下。最终我选择的是第二种办法

Gruntfile

grunt.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次(只有最后一次生效),所以只会反复构建同一个目录

热点排行