flex-combo
Advanced tools
Comparing version 0.1.5 to 0.1.6
@@ -8,2 +8,4 @@ var http = require('http') | ||
, joinbuffers = require('joinbuffers') | ||
, mkdirp = require('mkdirp') | ||
, crypto = require('crypto') | ||
, parse = require('url').parse; | ||
@@ -34,8 +36,7 @@ | ||
}, | ||
supportedFile: '\\.js|\\.css|\\.png|\\.gif|\\.jpg|\\.swf|\\.xml\\.less', | ||
supportedFile: '\\.js|\\.css|\\.png|\\.gif|\\.jpg|\\.swf|\\.xml|\\.less', | ||
prjDir: '' | ||
}; | ||
function adaptCharset(buff, outCharset){ | ||
var charset = isUtf8(buff) ? 'utf8' : 'gbk'; | ||
function adaptCharset(buff, outCharset, charset){ | ||
if (charset === outCharset) { | ||
@@ -81,3 +82,4 @@ return buff; | ||
var buff = fs.readFileSync(absPath); | ||
return adaptCharset(buff, param.charset); | ||
var charset = isUtf8(buff) ? 'utf8' : 'gbk'; | ||
return adaptCharset(buff, param.charset, charset); | ||
} | ||
@@ -95,3 +97,26 @@ } | ||
var cacheFile = function(fullPath, content, encode){ | ||
var absPath = path.join(param.cacheDir, fullPath); | ||
var lastDir = absPath.slice(0, absPath.lastIndexOf('/')); | ||
console.log(lastDir); | ||
if(!fs.existsSync(lastDir)){ | ||
console.log(' is not exist'); | ||
mkdirp(lastDir, function(){ | ||
fs.writeFileSync(absPath, content, encode); | ||
}); | ||
return; | ||
} | ||
fs.writeFileSync(absPath, content, encode); | ||
} | ||
var readFromCache = function(fullPath){ | ||
var absPath = path.join(param.cacheDir, fullPath); | ||
if(fs.existsSync(absPath)){ | ||
var buff = fs.readFileSync(absPath); | ||
var charset = isUtf8(buff) ? 'utf8' : 'gbk'; | ||
return adaptCharset(buff, param.charset, charset); | ||
} | ||
return null; | ||
} | ||
exports = module.exports = function(prjDir, urls, options){ | ||
@@ -101,2 +126,7 @@ if(urls){ | ||
} | ||
param.cacheDir = cacheDir = path.join(prjDir , '.flex-combo/cache'); | ||
if(!fs.existsSync(cacheDir)){ | ||
mkdirp(cacheDir); | ||
} | ||
if(options){ | ||
@@ -131,2 +161,8 @@ options.urls = param.urls; | ||
var cachedFile = readFromCache(url); | ||
if(cachedFile){ | ||
res.end(cachedFile); | ||
return; | ||
} | ||
//本地没有,从服务器获取 | ||
@@ -136,2 +172,6 @@ console.log('send http request:'+ param.host+ url); | ||
var buffs = []; | ||
if(resp.statusCode !== 200){ | ||
res.end('File ' + url + ' not found.'); | ||
return; | ||
} | ||
resp.on('data', function(chunk) { | ||
@@ -144,3 +184,4 @@ buffs.push(chunk); | ||
var singleFileContent = adaptCharset(buff, param.charset); | ||
var singleFileContent = adaptCharset(buff, param.charset, charset); | ||
cacheFile(url, buff, charset); | ||
res.end(singleFileContent ); | ||
@@ -197,5 +238,20 @@ return; | ||
} | ||
var cacheName = crypto.createHash('md5').update(reqArray[i].file).digest('hex'); | ||
var cachedContent = readFromCache('/' + cacheName); | ||
if(cachedContent){ | ||
reqArray[i].content = cachedContent; | ||
reqArray[i].ready = true; | ||
continue; | ||
} | ||
(function(id) { | ||
console.log('define request: '+ reqArray[i].file); | ||
http.get({host: param.host, port: 80, path: reqPath + reqArray[id].file}, function(resp) { | ||
if(resp.statusCode !== 200){ | ||
reqArray[id].ready = true; | ||
reqArray[id].content = 'File'+ reqArray[id].file +' not found.'; | ||
sendData(); | ||
return; | ||
} | ||
var buffs = []; | ||
@@ -209,3 +265,6 @@ console.log('request: ' + reqPath + reqArray[id].file); | ||
var buff = joinbuffers(buffs); | ||
reqArray[id].content = adaptCharset(buff, param.charset); | ||
var charset = isUtf8(buff) ? 'utf8' : 'gbk'; | ||
reqArray[id].content = adaptCharset(buff, param.charset, charset); | ||
var fileName = crypto.createHash('md5').update(reqArray[id].file).digest('hex'); | ||
cacheFile('/'+fileName, buff, charset); | ||
sendData(); | ||
@@ -212,0 +271,0 @@ }); |
{ | ||
"name": "flex-combo", | ||
"version": "0.1.5", | ||
"version": "0.1.6", | ||
"description": "The Flex-combo is combo tool designed for web front-end developer. It support various kinds of combo format by modify configuration(eg. yahoo combo).", | ||
@@ -5,0 +5,0 @@ "main": "flex-combo.js", |
13031
275