mm_os
Version:
MM_OS服务端架构,用于快速构建应用程序,支持网站建设、小程序后台、AI应用、物联网(IOT/AIOT)、游戏服务端等多种场景。
156 lines (145 loc) • 3.07 kB
JavaScript
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;