UNPKG

mm_os

Version:

MM_OS服务端架构,用于快速构建应用程序,支持网站建设、小程序后台、AI应用、物联网(IOT/AIOT)、游戏服务端等多种场景。

156 lines (145 loc) 3.07 kB
require('mm_machine'); const { Word } = require('./ulits/word.js'); if (!$.admin) { $.admin = {}; } /** * 公共模块管理类 */ class Com { static config = { name: 'com', title: '公共模块' }; /** * 构造函数 * @param {object} config 配置参数 */ constructor(config) { this.config = { name: 'com', ...Com.config, ...config }; /** * 公共模块配置列表 */ this.list = []; } } /** * 排序 * @private */ Com.prototype._sort = function () { this.list.sort((a, b) => { return a.sort - b.sort; }); }; /** * 将文件名改为类名 * @param {string} name 文件名 * @returns {string} 类名 */ Com.prototype.toClassName = function (name) { var word = new Word(); return word.toPascalCase(name); }; /** * 加载配置 * @param {string} file 配置文件 * @returns {object} 返回配置信息 */ Com.prototype._loadConfig = function (file) { var cg; if (file.hasFile()) { cg = file.loadJson(); if (!cg) { var name = this.toClassName(file.dirname().basename()); var content = `{ // 名称 "name": "${name}", // 标题 "title": "公共模块", // 描述 "description": "定义公共模块", // 状态 0:禁用 1:启用 "state": 1, // 排序,越小越靠前 "sort": 100, // 依赖的module "dependencies": [] }`; file.saveText(content); cg = file.loadJson(); } } return cg; }; /** * 加载脚本 * @param {object} cg 配置信息 */ Com.prototype._loadScript = function (cg) { var file = (cg.main || './index.js').fullname(cg.dir); if (!file.hasFile()) { var name = this.toClassName(cg.name); var title = cg.title; var script = `/** * ${title} */ class ${name} { /** * 构造函数 * @param {object} config 配置参数 */ constructor(config) { this.config = {...config}; } } exports.${name} = ${name};`; file.saveText(script); } try { this[cg.name] = $.require(file, (mod) => { this[cg.name] = mod; }); } catch (error) { $.log.error('加载脚本失败!', error); } }; /** * 批量加载配置 * @private * @param {string} dir 目录路径 * @param {string} dirname 目录名 */ Com.prototype._loads = function (dir, dirname) { if (!dir || !dir.hasDir()) { return; } var files = $.file.getAll(dir, this.config.name + '.json', dirname); for (let i = 0; i < files.length; i++) { var file = files[i]; var cg = this._loadConfig(file); if (cg) { cg.dir = file.dirname(); this.list.push(cg); } } this._sort(); for (let i = 0; i < this.list.length; i++) { var cg = this.list[i]; if (cg.state) { this._loadScript(cg); } } }; /** * 加载公共模块 */ Com.prototype.loads = function () { this._loads('./com'.fullname(__dirname)); this._loads('/com'.fullname()); }; exports.Com = Com;