Skip to content

Instantly share code, notes, and snippets.

@fouber
Created March 21, 2014 15:34
Show Gist options
  • Save fouber/9688913 to your computer and use it in GitHub Desktop.
Save fouber/9688913 to your computer and use it in GitHub Desktop.
/*==========[ 构建工具核心逻辑 ]==========*/
//默认配置
var defaultConfig = {
plugins : [ 'parse', 'optimize', 'lint', 'test' ]
};
var sys = {
find : function(){/*查找所有项目文件*/},
get : function(key){/*获取配置*/},
set : function(key, value){/*设置配置数据*/},
loadConf : function(path){/*加载配置文件*/},
File : function(){/*file类*/},
util : {/*常用工具函数*/}
};
var conf = process.cwd()+'/conf.js';
//加载配置
sys.loadConf(conf);
//找到所有源码文件
var files = sys.find();
files.forEach(function(index, path){ //遍历文件编译
var file = new sys.File(path); //创建一个文件对象
sys.get('plugins').forEach(function(index, plugin){ //遍历插件
var name = sys.get('plugin-' + plugin + '-'+file.ext);
plugin = require(name); //加载插件
var content = plugin(file.getContent(), file); //插件处理内容
file.setContent(content); //设置文件内容
});
});
/*==========[ 一个配置文件:conf.js ]==========*/
sys.set({
plugins : [ 'parse', 'lint', 'test', 'optimize', 'deploy' ],
file_system : [
{
regex : '**.js',
deploy : 'dist/js/%s'
},
{
regex : '**.css',
deploy : 'dist/css/%s'
},
{
regex : '**.(png|gif|jpeg|jpg|swf)',
deploy : 'dist/img/%s'
},
{
regex : '**',
deploy : false
}
]
});
/*
执行构建的时候就是:
js文件被 plugin-parse-js、plugin-lint-js、plugin-test-js、plugin-optimize-js、plugin-deploy-js 插件处理
css文件被 plugin-parse-css、plugin-lint-css、plugin-test-css、plugin-optimize-css、plugin-deploy-css 插件处理
less文件被 plugin-parse-less、plugin-lint-less、plugin-test-less、plugin-optimize-less、plugin-deploy-less 插件处理
...
每个插件只负责处理一种文件的内容,指责非常单一。
file_system修改文件对象的属性,在插件中可以获取到。
比如上面给每个文件都有一个deploy属性,
那么,plugin-deploy插件就能这样实现了:
module.exports = function(content, file){
sys.util.write(content, file.deploy);
}
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment