Comparing version 0.1.24 to 0.1.25
201
index.js
/** | ||
* Created by wangshiqiang on 20160321. | ||
* 该工具是将前端静态资源,从开发目录,发布到待发布目录 | ||
* 在这个过程中,针对静态资源文件,进行了压缩和版本号的控制 | ||
* 修改相关文件(含jsp页面)对该资源的引用 | ||
* 只提供银客网内部自行使用,使用前请到default.json文件中,配置相关默认值 | ||
* 在这个过程中,针对静态资源文件,进行了压缩和版本号的控制,并修改相关文件对该资源的引用 | ||
* 只供银客集团内部自行使用 | ||
* 目前只支持windows系统 | ||
@@ -15,4 +14,8 @@ * | ||
* 无 | ||
===== 功能使用1: ===== | ||
目录、文件自动清理功能。 | ||
若/dev/目录中的,某个目录或文件有移除,只需在/v1/目录下执行以下命令,即可将/revs/目录、filesMap.json文件中,对应的内容自动移除,无需手动清除: | ||
yk-cmp -c | ||
功能使用: | ||
===== 功能使用2: ===== | ||
1、银客理财 | ||
@@ -100,3 +103,5 @@ PC、WAP、APP三端都在/v1/目录下,执行以下命令进行编译:yk-cmp | ||
var fs = require('fs'), | ||
path = require('path'); | ||
path = require('path'), | ||
os = require('os'); | ||
//var operatorUser = os.userInfo().username; | ||
var rd = require('rd'); | ||
@@ -132,96 +137,2 @@ var readdirSync = require('fsk-readdir').readdirSync; | ||
// 项目 域名切换功能 | ||
/*var isLoanWbMast = cwd.indexOf('/loan_wb_mast/') != -1, | ||
isLoanWbTest = cwd.indexOf('/loan_wb_test/') != -1, | ||
isLoanHao123Mast = cwd.indexOf('/loan_hao123_mast/') != -1, | ||
isLoanHao123Test = cwd.indexOf('/loan_hao123_test/') != -1; | ||
function updateDomain(switchType){ | ||
console.time('耗时:'); | ||
rd.each(cwd, function(_file, _stat, next){ | ||
if(_stat.isFile()){ // 如果是文件 | ||
var extName = path.extname(_file); | ||
if(extName === '.js' || extName === '.css' || extName === '.tpl'){ | ||
var _cont = fs.readFileSync(_file, 'utf8'); | ||
// 微博项目 | ||
if(isLoanWbMast || isLoanWbTest){ | ||
if(switchType == 'toTest'){ // 切换为测试环境域名 | ||
_cont = _cont.replace(/xiaowei\.yinker\.com/gm, 'qa-xiaowei.yinker.com'); | ||
}else if(switchType == 'toMast'){ // 切换为生产环境域名 | ||
_cont = _cont.replace(/xiaowei\.yinker\.com/gm, 'jieqian.sc.weibo.com'); | ||
}else if(!switchType){ // 测试域名或生产域名,还原为开发域名 | ||
_cont = _cont.replace(/qa-xiaowei\.yinker\.com/gm, 'xiaowei.yinker.com') | ||
.replace(/jieqian\.sc\.weibo\.com/gm, 'xiaowei.yinker.com'); | ||
} | ||
} | ||
// hao123项目 | ||
if(isLoanHao123Mast || isLoanHao123Test){ | ||
if(switchType == 'toTest'){ // 切换为测试环境域名 | ||
_cont = _cont.replace(/jietiao\.yinker\.com/gm, 'qa-jietiao.yinker.com'); | ||
}else if(switchType == 'toMast'){ // 切换为生产环境域名 | ||
_cont = _cont.replace(/jietiao\.yinker\.com/gm, 'xiaojietiao.yinker.com'); | ||
}else if(!switchType){ // 测试域名或生产域名,还原为开发域名 | ||
_cont = _cont.replace(/qa-jietiao\.yinker\.com/gm, 'jietiao.yinker.com') | ||
.replace(/xiaojietiao\.yinker\.com/gm, 'jietiao.yinker.com'); | ||
} | ||
} | ||
fs.writeFileSync(_file, _cont, 'utf8'); | ||
} | ||
} | ||
next(); | ||
}, function(err){ | ||
var _domain; | ||
if(isLoanWbMast || isLoanWbTest){ | ||
_domain = '====>开发:xiaowei.yinker.com'; | ||
if(switchType == 'toTest'){ | ||
_domain = '开发:xiaowei.yinker.com ====>测试:qa-xiaowei.yinker.com'; | ||
}else if(switchType == 'toMast'){ | ||
_domain = '开发:xiaowei.yinker.com ====>生产:jieqian.sc.weibo.com'; | ||
} | ||
} | ||
if(isLoanHao123Mast || isLoanHao123Test){ | ||
_domain = '====>开发:jietiao.yinker.com'; | ||
if(switchType == 'toTest'){ | ||
_domain = '开发:jietiao.yinker.com ====>测试:qa-jietiao.yinker.com'; | ||
}else if(switchType == 'toMast'){ | ||
_domain = '开发:jietiao.yinker.com ====>生产:xiaojietiao.yinker.com'; | ||
} | ||
} | ||
console.log('操作成功! '.green); | ||
console.log(_domain.green); | ||
console.timeEnd('耗时:'); | ||
}); | ||
} | ||
if(isLoanWbMast || isLoanWbTest || isLoanHao123Mast || isLoanHao123Test){ | ||
if(!/.+(\/v1)$/.test(cwd)){ | ||
console.log('\n ERROR:请检查当前命令运行的所在目录!'.red); | ||
return false; | ||
} | ||
if(isLoanWbMast || isLoanHao123Mast){ | ||
if(argv.toDev){ | ||
updateDomain(); | ||
}else if(argv.toMast){ | ||
updateDomain('toMast'); | ||
}else{ | ||
console.log('\n ERROR:请检查当前运行命令或参数!'.red); | ||
} | ||
}else if(isLoanWbTest || isLoanHao123Test){ | ||
if(argv.toDev){ | ||
updateDomain(); | ||
}else if(argv.toTest){ | ||
updateDomain('toTest'); | ||
}else{ | ||
console.log('\n ERROR:请检查当前运行命令或参数!'.red); | ||
} | ||
}else{ | ||
console.log('\n ERROR:请检查当前运行命令或参数!'.red); | ||
} | ||
return false; | ||
}*/ | ||
// 小V贷款项目 域名切换功能 END | ||
var staticUrl, | ||
@@ -320,32 +231,53 @@ devDir, | ||
// /revs/目录、filesMap.json文件中,文件清理 | ||
// if(argv.clear){ | ||
// rd.each(outputDir, function(_file, _stat, next){ | ||
// console.log(_file, ' || '); | ||
// var switchDev = outputDir.replace('', '$2'); | ||
// var isHave = fs.existsSync(_dst); // 获取目标路径下的资源,是否存在 | ||
// if() | ||
// next(); | ||
// }, function(err){ | ||
console.time(' 耗时'); | ||
// }); | ||
// return false; | ||
// } | ||
/* | ||
* /revs/目录、filesMap.json文件内容清理 | ||
*/ | ||
if(argv.clear){ | ||
var delFiles = 0, | ||
delDir = 0; | ||
function callDeleteFunction(dir, cb){ | ||
rd.each(dir, function(_file, _stat, next){ | ||
/* | ||
* @example: | ||
* _file: {String} 'E:\revs\js' || 'E:\revs\js\zepto.js' | ||
* _stat: {Object} 状态信息 | ||
* | ||
*/ | ||
_file = _file.split(path.sep).join('/'); // 将'\'格式为'/' | ||
var switchDev = _file.replace(/\/revs\//, '/dev/'); | ||
var isHave = fs.existsSync(switchDev); // 获取目标路径下的资源,是否存在 | ||
if(!isHave){ | ||
if(_stat.isFile()){ | ||
fs.unlinkSync(_file); | ||
var keyName = staticUrl + _file.substring(_file.indexOf('/revs/') + 6); | ||
delete filesMapJson[keyName]; // 删除 filesMap.json 中对应的属性 | ||
delFiles ++; | ||
console.log(' DelFile:'.magenta + _file); | ||
}else if(_stat.isDirectory()){ | ||
fs.rmdir(_file, function(err){ | ||
if(!err){ | ||
delDir ++; | ||
console.log(' DelDir:'.magenta + _file); | ||
}else{ | ||
callDeleteFunction(_file); | ||
} | ||
}); | ||
} | ||
} | ||
next(); | ||
}, function(err){ | ||
cb && cb.call(this); | ||
}); | ||
}; | ||
// 单独添加版本号 -- PS:暂时有冲突问题,先不在项目中应用 | ||
// function addVersion(f){ | ||
// var fsContent = fs.readFileSync(f, 'utf8').replace(/(\.com\/v1)\/dev\//gm, '$1/revs/'); | ||
// for(var key in filesMapJson){ | ||
// var _reg = new RegExp(key, 'gm'); | ||
// fsContent = fsContent.replace(/(\.com\/v1\/revs\/[^\?]+)\?v=[a-z0-9]{0,8}/gm, '$1') | ||
// .replace(_reg, key + '?v=' + filesMapJson[key].split('|')[0].substr(0, 8)); | ||
// } | ||
// fs.writeFileSync(f, fsContent, 'utf8'); | ||
// } | ||
callDeleteFunction(outputDir, function(){ | ||
fs.writeFileSync(filesMap, JSON.stringify(filesMapJson, null, 2)); | ||
console.log('\n ===== 本次共删除:'+ delFiles +' 个文件,'+ delDir +' 个文件夹 ====='); | ||
console.timeEnd(' 耗时'); | ||
}); | ||
return false; | ||
} | ||
// var readCont = fs.readFileSync('e:/fe/loan_wb/trunk/v1/revs/css/pages/home.css');console.log(readCont + ' AAAAAA'); | ||
// return; | ||
// 资源压缩(css、js) | ||
@@ -370,11 +302,2 @@ function compress(c, t){ | ||
}); | ||
// var readCont = fs.readFile(c, 'utf8'); | ||
// _code = new CleanCss({ // 是否换行:{keepBreaks: true} | ||
// compatibility: { | ||
// properties: { | ||
// iePrefixHack:true, | ||
// ieBangHack: true | ||
// } | ||
// } | ||
// }).minify(readCont).styles; | ||
} | ||
@@ -510,6 +433,6 @@ } | ||
var _val = val.replace(/.*\/(js\/|tpls\/)+(.*\.js$)/, '$1$2'); // _val: js/yk.apps.js | ||
// compress(_targetPath, '.js'); // 文件压缩 | ||
// replaceNewUrl(_targetPath); // 替换url dev -> revs | ||
//compress(_targetPath, '.js'); // 文件压缩 | ||
//replaceNewUrl(_targetPath); // 替换url dev -> revs | ||
// filesMapJson[staticUrl + _val] = _md5Hex + '|' + callTimes; | ||
// relatedFileReplace(jsOutput, _val, _v); | ||
//relatedFileReplace(jsOutput, _val, _v); | ||
@@ -532,3 +455,3 @@ setTimeout(function(){ | ||
// var _hours = (needTime / 1000 / 60 / 60).toString().split('.')[1]; | ||
//console.log('\n Compile success!\n'.cyan + ' ===== 共编译提交:' + mapPath.length + ' 个文件;耗时:'+ (needTime / 1000 / 60 / 60).toString().split('.')[0] +' 小时 '+ (!_hours ? 0 : (Number( '0.' + _hours) * 60).toString().split('.')[0]) +' 分 '+ (!_second ? 0 : (Number( '0.' + _second) * 60).toString().split('.')[0]) +' 秒 ===== '); | ||
// console.log('\n Compile success!\n'.cyan + ' ===== 共编译构建:' + mapPath.length + ' 个文件;耗时:'+ (needTime / 1000 / 60 / 60).toString().split('.')[0] +' 小时 '+ (!_hours ? 0 : (Number( '0.' + _hours) * 60).toString().split('.')[0]) +' 分 '+ (!_second ? 0 : (Number( '0.' + _second) * 60).toString().split('.')[0]) +' 秒 ===== '); | ||
}); | ||
@@ -535,0 +458,0 @@ |
{ | ||
"name": "yk-cmp", | ||
"description": "静态资源,从开发目录,发布到待发布目录,进行了压缩和版本号控制。修改相关文件对该资源的引用。", | ||
"version": "0.1.24", | ||
"version": "0.1.25", | ||
"author": { | ||
@@ -6,0 +6,0 @@ "name": "Wangshiqiang", |
* 前端资源构建编译工具 | ||
command:yk-cmp | ||
Command: | ||
yk-cmp // 构建编译 | ||
yk-cmp -c // 清理输出目录(/revs/)垃圾文件 | ||
##### 如何安装 ## | ||
============ 如何安装 ============ | ||
npm install yk-cmp -g | ||
============ 功能使用 ============ | ||
... Please view index.js file from document root; | ||
... Please view index.js file from document root; | ||
============ 功能使用 END ============ |
14
21472
408