UNPKG

uni-easy-pages

Version:

uni-app开发环境辅助生产工具

122 lines (109 loc) 3.71 kB
const fs = require('fs'); const path = require('path'); const rule = { globalStyle: /(?<=const\s+globalStyle\s*=\s*)\{[\s\S]*?}(?=\s*;)/, pages: /(?<=const\s+pages\s*=\s*)\[[\s\S]*?](?=\s*;)/g, easycom: /(?<=const\s+easycom\s*=\s*)\{[\s\S]*?}(?=\s*;)/, tabBar: /(?<=const\s+tabBar\s*=\s*)\{[\s\S]*?}(?=\s*;)/, condition: /(?<=const\s+condition\s*=\s*)\{[\s\S]*?}(?=\s*;)/, extras: /(?<=const\s+extras\s*=\s*)\{[\s\S]*?}(?=\s*;)/, leftWindow: /(?<=const\s+leftWindow\s*=\s*)\{[\s\S]*?}(?=\s*;)/, rightWindow: /(?<=const\s+rightWindow\s*=\s*)\{[\s\S]*?}(?=\s*;)/, topWindow: /(?<=const\s+topWindow\s*=\s*)\{[\s\S]*?}(?=\s*;)/, } module.exports = class { constructor(watchDirs, watchFileName) { this.watchDirs = watchDirs; this.watchFileName = watchFileName; this.pagesJsonFilePath = path.join(path.resolve(), "pages.json"); } static init(watchDirs, watchFileName) { return new this(watchDirs, watchFileName); } start() { let pagesData = {}; try { let files = []; this.watchDirs.forEach((item) => { files = files.concat(this.loadFile(item)); }); let codeStr = ''; files.forEach(item => { console.log(item) try { let str = fs.readFileSync(item, 'utf-8'); let dataStr = `!${str}`; dataStr = dataStr.replace(/\w+(?=\:)/g, function(it) { return `"${it}"` }) codeStr += str; } catch (err) { console.error('解析数据失败,文件->' + item); } }); let valueStr = ''; for (let [key, reg] of Object.entries(rule)) { try { let pagesStr = ''; codeStr = codeStr.replace(eval(reg), (value) => { if (key == "pages") { if (value.replace(/[\r\n]/g, "").trim() != "[]") { value = value.replace(/\[|]/g, ''); //去除中括号 value = this.removeIllegalSign(value); //去除非法字符结尾 pagesStr += `${value},` } } else { if (key == "extras") { if (value.replace(/[\r\n]/g, "").trim() != "{}") { value = value.replace(/^\{|/, ''); //去除中括号 value = value.replace(/\}$/, ''); //去除中括号 value = this.removeIllegalSign(value); //去除非法字符结尾 valueStr += `${value},` } } else { value = value.replace(/\'/g, "\""); value = this.removeIllegalSign(value); //去除非法字符结尾 valueStr += `"${key}":${value},` } } return '' }) if (key == "pages") { valueStr += `"${key}":[${pagesStr}],` } } catch (err) { console.error('解析配置文件数据失败,配置文件->' + key); } } fs.writeFileSync(this.pagesJsonFilePath, this.removeIllegalSign("{" + valueStr + "}")); console.log("pages.json 创建完成"); } catch (err) { console.error(err); } } /** * 将一个字符串格式化为正在的json 去除非法结尾字符 * @param {String} str 需要去除非法结尾的字符串 */ removeIllegalSign(str) { str = str.replace(/\,[\s]*(?=\})/g, sign => sign.replace(/\,/g, '')); return str.replace(/(?<=[\}\]])[\s]*\,[\s]*(?=[\}\]])/, sign => sign.replace(/\,/g, '')) } loadFile(dirPath) { let files = []; let dirItems = fs.readdirSync(dirPath); dirItems.forEach(item => { if (this.watchFileName.indexOf(item) > -1) { files.push(path.join(dirPath, item)); } else { if (fs.statSync(path.join(dirPath, item)).isDirectory()) { let _files = this.loadFile(path.join(dirPath, item)); if (_files.length > 0) { files = files.concat(_files); } } } }); return files; } }