UNPKG

magix-combine

Version:

合并Magix View的html,js,css成一个js文件,并检测html,js,css中可能存在的问题

67 lines 2.39 kB
/* 处理代码片断,如'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(); } }); };