toosolo
Version:
基于Node.js的静态博客程序
142 lines (108 loc) • 3.26 kB
JavaScript
var path = require('path'),
fs = require('fs'),
async = require('async'),
commander = require('commander'),
config,
util,
coreParser,
pluginName;
commander
.version('2.0.10')
.usage('[--选项 值]')
.option('-i, --init', '在当前目录初始化TooSolo文件')
.option('-s, --skin', '将默认皮肤复制到当前项目并使用该皮肤')
.parse(process.argv);
init();
function init(){
if (commander.init) {
pluginName = 'init';
}else{
config = require(path.resolve(process.cwd() + '/config.json'));
util = require('./lib/util.js');
coreParser = require('./lib/coreparser.js');
global.tooSolo = {};
if(!config.skinPath){
config.skinPath = path.join(__dirname,'./skin');
}
if(!config.globalPath){
config.globalPath = path.join(config.sourcePath,'./global');
}
if(!config.blogPath){
config.blogPath = path.join(config.sourcePath,'./blogs');
}
global.tooSolo.config = config;
if(commander.skin){
pluginName = 'skin';
}
}
console.log('\n==================== Solo 2.0 ====================\n');
if(pluginName){ //如果指定了插件名字,则调用对应插件
require('./lib/sysplugins/'+pluginName)();
console.log('\n======================= 完成 ======================\n');
}else{
var tasks = [coreParser.parse];
// async.series([])
async.series([coreParser.parse,
_dealParserPlugins,
_dealPagePlugins,
function(){
console.log('\n=================== 博客构建完成 ===================\n');
}]);
// dfd = dfd.then(coreParser.parse).then(_dealParserPlugins).then(_dealPagePlugins);
// dfd = dfd.then(function(){
// console.log('\n=================== 博客构建完成 ===================\n');
// });
}
}
function _dealParserPlugins(callback){
var parserPluginsPath = path.join(__dirname,'./lib/parserplugins');
async.waterfall([function(callback){
fs.readdir(parserPluginsPath,function(err,fileList){
callback(null,fileList);
});
},function(fileList,callback){
var pluginList = [];
fileList.forEach(function(pluginFile){
var pluginName = pluginFile.replace(/\.js$/,'');
var disabledList = config.disabledParserPlugins;
if(!disabledList || disabledList.indexOf(plugin) === -1){
if(/\.js$/.test(pluginFile)){
pluginList.push(require(path.join(parserPluginsPath,pluginName)));
}
};
});
async.series(pluginList,callback)
}],function(err){
if(err){
console.log(err);
}
// console.log('er',err);
callback();
});
}
function _dealPagePlugins(callback){
var pagePluginsPath = path.join(__dirname,'./lib/pageplugins');
async.waterfall([function(callback){
fs.readdir(pagePluginsPath,function(err,fileList){
callback(null,fileList);
});
},function(fileList,callback){
var pluginList = [];
fileList.forEach(function(pluginFile){
var pluginName = pluginFile.replace(/\.js$/,'');
var disabledList = config.disabledPagePlugins;
if(!disabledList || disabledList.indexOf(pluginName) === -1){
if(/\.js$/.test(pluginFile)){
pluginList.push(require(path.join(pagePluginsPath,pluginName)));
}
};
});
async.series(pluginList,callback)
}],function(err){
if(err){
console.log(err);
}
callback();
});
}