magix-combine
Version:
合并Magix View的html,js,css成一个js文件,并检测html,js,css中可能存在的问题
107 lines (94 loc) • 4.42 kB
JavaScript
/*
初始化各种文件夹的配置项,相对转成完整的物理路径,方便后续的使用处理
*/
let path = require('path');
let configs = require('./util-config');
let crypto = require('crypto');
let utils = require('./util');
let md5 = require('./util-md5');
module.exports = () => {
if (!configs.$inited) {
configs.$inited = 1;
if (configs.tmplFolder) {
configs.commonFolder = configs.tmplFolder;
}
if (configs.srcFolder) {
configs.compiledFolder = configs.srcFolder;
}
configs.commonFolder = path.resolve(configs.commonFolder);
configs.compiledFolder = path.resolve(configs.compiledFolder);
configs.jsFileExtNamesReg = new RegExp('\\.(?:' + configs.jsFileExtNames.join('|') + ')$');
configs.moduleIdRemovedPath = configs.commonFolder; //把路径中开始到模板目录移除就基本上是模块路径了
if (configs.projectName === null) {
let str = crypto.createHash('sha512')
.update(configs.commonFolder, 'ascii')
.digest('hex');
configs.projectName = 'x' + str.substring(0, 2);
} else {
let srcName = configs.projectName;
let name = md5.byNum(utils.hash(srcName), false);
let now = md5.byNum(new Date().getMilliseconds(), false);
if (!configs.debug) {
srcName = '';
}
configs.projectName = srcName + name + now;
}
let tmplExtNames = configs.tmplFileExtNames;
let names = tmplExtNames.slice();
if (names.indexOf('mx') == -1) {
names.push('mx');
}
configs.tmplFileExtNamesReg = new RegExp('\\.(?:' + names.join('|') + ')$');
configs.htmlFileReg = new RegExp('(raw|updater)?@[^\'"\\s@]+\\.(?:' + tmplExtNames.join('|') + ')((?::const\\[[^\\[\\]]*\\]|:global\\[[^\\[\\]]*\\]|:updateby\\[[^\\[\\]]*\\]|:art(?:\s*=\s*(?:true|false))?)+)?');
configs.htmlFileGlobalReg = new RegExp(configs.htmlFileReg, 'g');
//模板处理,即处理view.html文件
configs.fileTmplReg = new RegExp('([\'"`])(raw|updater)?\\u0012@([^\'"\\s@]+)\\.(' + tmplExtNames.join('|') + ')((?::const\\[[^\\[\\]]*\\]|:global\\[[^\\[\\]]*\\]|:updateby\\[[^\\[\\]]*\\]|:art(?:\s*=\s*(?:true|false))?)+)?\\1', 'g');
configs.tmplMxEventReg = /\bmx-(?!view|vframe|owner|autonomy|datafrom|guid|ssid|dep|html|static|is|as|type|name|from|to)([a-zA-Z]+)\s*=\s*(?:"([^"]*)"|'([^']*)')/g;
if (configs.addTmplViewsToDependencies) {
configs.tmplAddViewsToDependencies = true;
} else if (configs.addTmplViewsToDependencies === false) {
configs.tmplAddViewsToDependencies = false;
}
if (configs.outputTmplWithEvents) {
configs.tmplOutputWithEvents = true;
} else if (configs.outputTmplWithEvents === false) {
configs.tmplOutputWithEvents = false;
}
if (configs.compressTmplVariable) {
configs.tmplCompressVariable = true;
} else if (configs.compressTmplVariable === false) {
configs.tmplCompressVariable = false;
}
if (configs.magixUpdaterIncrement) {
configs.tmplCompressVariable = false;
}
if (configs.lessOptions) {
configs.less = configs.lessOptions;
}
if (configs.cssnanoOptions) {
configs.cssnano = configs.cssnanoOptions;
}
if (configs.htmlminifierOptions) {
configs.htmlminifier = configs.htmlminifierOptions;
}
let rsPrefix = configs.revisableStringPrefix;
if (!rsPrefix) {
rsPrefix = '__';
} else if (rsPrefix.charAt(0) === '$') {//以$开头是开发者手动处理的
rsPrefix = '_' + rsPrefix;
}
configs.revisableStringPrefix = rsPrefix;
let galleryPrefixes = Object.create(null);
galleryPrefixes.native = 1;
for (let p in configs.galleries) {
if (p.endsWith('Root')) {
galleryPrefixes[p.slice(0, -4)] = 1;
} else if (p.endsWith('Map')) {
galleryPrefixes[p.slice(0, -3)] = 1;
}
}
configs.galleryPrefixes = galleryPrefixes;
configs.selectorKeepNameReg = /(--)[\w-]+$/;
configs.selectorDSEndReg = /--$/;
}
};