gulp-rev-easy
Version:
easy add hash to asset path uc.js to uc.js?v=afb23 or simple add date uc.js to uc.js?v=201503031214
75 lines (59 loc) • 2.44 kB
JavaScript
/**
* Created by timtian on 2016/8/26.
*/
var gutil = require('gulp-util');
var revver = require('../revver');
var parser = {};
parser.parse = function (text, filepath, options) {
try {
var resText = [];
var textList = [];
var mList = [];
if (options.ignorePattern) {
var tmptextList = text.split(options.ignorePattern);
var m;
var mindex = 0;
textList.push({raw: tmptextList[mindex], ignore: false});
while ((m = options.ignorePattern.exec(text)) !== null) {
textList.push({raw: m[0], ignore: options.ignoreFilter(m)});
mindex++;
textList.push({raw: tmptextList[mindex], ignore: false});
}
} else {
textList.push({raw:text, ignore:false});
}
for (var j = 0; j < textList.length; j++) {
var revObj = textList[j];
if (!revObj.ignore) {
var revText = revObj.raw;
for (var i = 0; i < options.fileTypes.length; i++) {
var fileType = options.fileTypes[i];
var pattern = options.patterns[fileType];
revText = revText.replace(pattern.regex, function (match, p1, p2, p3, offset, string) {
var q = p2.substring(0, 1);
var src = p2.substring(1, p2.length - 1);
var revv = revver.rev(src, filepath, options);
var newsrc = p2;
if (revv !== '') {
newsrc = options.transformPath(src, revv);
gutil.log(src + ' --> ', gutil.colors.green(newsrc));
} else {
gutil.log(gutil.colors.blue('ignore:rev is empty'), src);
}
return p1 + q + newsrc + q + p3;
})
}
resText.push(revText);
}else{
resText.push(revObj.raw);
}
if (mList.length > 0)
resText.push(mList.shift());
}
return resText.join('');
} catch (err) {
gutil.log(gutil.colors.red(err.message));
gutil.log(gutil.colors.red(err.stack));
}
};
module.exports = parser;