magix-combine
Version:
合并Magix View的html,js,css成一个js文件,并检测html,js,css中可能存在的问题
67 lines • 2.39 kB
JavaScript
/*
处理代码片断,如'top@./list.js',用于手动合并一些代码
*/
let deps = require('./util-deps');
let configs = require('./util-config');
let path = require('path');
let checker = require('./checker');
let fs = require('fs');
let sep = path.sep;
let fileReg = /(['"`])([a-z,]+)?\u0012@([^'"`]+)\.([a-z]{2,})\1;?/g;
module.exports = e => {
return new Promise((resolve, reject) => {
let contentCache = Object.create(null),
count = 0,
resumed = false;
let resume = () => {
if (!resumed) {
resumed = true;
e.content = e.content.replace(fileReg, m => contentCache[m]);
resolve(e);
}
};
let readFile = (key, file, ctrl) => {
count++;
let to = path.resolve(configs.compiledFolder + file.replace(configs.moduleIdRemovedPath, ''));
fs.access(file, (fs.constants ? fs.constants.R_OK : fs.R_OK), err => {
if (err) {
checker.CSS.markUnexists(file, e.from);
contentCache[key] = '(()=>{throw new Error("unfound:' + file + '")})()';
count--;
if (!count) {
resume();
}
} else {
let ctrls = ctrl.split(',');
let c = {};
for (let r of ctrls) {
c[r] = true;
}
e.processContent(file, to, '', false, c).then(info => {
contentCache[key] = info.content;
count--;
if (!count) {
resume();
}
}).catch(reject);
}
});
};
let tasks = [];
e.content.replace(fileReg, (m, q, ctrl, name, ext) => {
let file = path.resolve(path.dirname(e.from) + sep + name + '.' + ext);
if (e.from && e.to) {
deps.addFileDepend(file, e.from, e.to);
}
tasks.push([m, file, ctrl || '']);
});
if (tasks.length) {
let i = 0;
while (i < tasks.length) {
readFile.apply(null, tasks[i++]);
}
} else {
resume();
}
});
};