bm_scaffold_async_router
Version:
本木前端脚手架-异步路由版
90 lines (79 loc) • 2.58 kB
JavaScript
/**
* @Author: songqi
* @Date: 2016-09-14
* @Email: songqi@benmu-health.com
* @Last modified by: songqi
* @Last modified time: 2017-03-06
*/
var fs = require('fs'),
glob = require('glob'),
path = require('path'),
childProcess = require('child_process'),
print = require('../print');
var cpus = require('os').cpus().length;
var versionTask = [],
writeWorking = false;
function doFork(element, type){
var n = childProcess.fork(path.resolve(__dirname, './md5cssAndJs.js'));
n.send({
type: type,
name: element
});
return n;
}
function writeHtmlVersion(){
if(writeWorking || !versionTask.length){
return;
}else{
writeWorking = true;
}
var _task = versionTask[0];
_task.ifile && glob(_task.ifile, function(err, files) {
if (err) return console.log(err);
files.forEach(function(ilist) {
var result = fs.readFileSync(ilist, 'utf8').replace(new RegExp('/' + _task.l_filename + '[^a-zA-Z_0-9].*?', "g"), function(sfile_name) {
return sfile_name.replace(_task.l_filename, _task.l_md5_filename)
});
if (result) {
fs.writeFileSync(ilist, result, 'utf8');
}
})
});
versionTask.shift();
writeWorking = false;
writeHtmlVersion();
}
String.prototype.firstUpperCase=function(){
return this.replace(/^\S/,function(s){return s.toUpperCase();});
}
function doTask(tasks, type, done){
var times = +new Date();
len = cpus > tasks.length ? tasks.length : cpus;
for(var i=len; i--;){
(function(){
var n = doFork(tasks.shift(), type);
n.on('message', function(message){
if(message.type === 'done'){
if(tasks.length !== 0){
n.send({
type: type,
name: tasks.shift()
});
}else{
n.kill();
--len;
if(len === 0){
print.gulpLog(' min-md5' + type.firstUpperCase() + ':', (+new Date() - times));
// 将 version 号写到 html 文件中
writeHtmlVersion();
done();
}
}
}else if(message.type === 'versionTask'){
versionTask.push(message)
}
})
})()
}
}
module.exports = doTask