UNPKG

magix-composer

Version:

compile html, style and javascript files into javascript

63 lines (62 loc) 2.16 kB
/* 处理代码片断,如'top@./list.js',用于手动合并一些代码 */ let deps = require('./util-deps'); let configs = require('./util-config'); let path = require('path'); let cssChecker = require('./checker-css'); let fs = require('fs'); let sep = path.sep; let fileReg = /(['"`])\x12@([^'"`]+\.[jt]s)\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) { cssChecker.markUnexists(file, e.from); contentCache[key] = `(()=>{throw new Error(${JSON.stringify('unfound:' + file)})})()`; count--; if (!count) { resume(); } } else { e.processContent(file, to).then(info => { contentCache[key] = info.content; count--; if (!count) { resume(); } }).catch(reject); } }); }; let tasks = []; e.content.replace(fileReg, (m, q, name) => { let file = path.resolve(path.dirname(e.from) + sep + name); if (e.from && e.to) { deps.addFileDepend(file, e.from, e.to); } tasks.push([m, file]); }); if (tasks.length) { let i = 0; while (i < tasks.length) { readFile.apply(null, tasks[i++]); } } else { resume(); } }); };