node-web-mvc
Version:
node spring mvc
58 lines (57 loc) • 2.42 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.SpringBootApplication = void 0;
const src_1 = __importDefault(require("../hmr/src"));
const ElementType_1 = __importDefault(require("./annotations/annotation/ElementType"));
const Target_1 = __importDefault(require("./annotations/Target"));
const Tracer_1 = __importDefault(require("./annotations/annotation/Tracer"));
const HotUpdaterReleaseManager_1 = __importDefault(require("../hmr/src/HotUpdaterReleaseManager"));
class SpringBootApplication {
onInitialize() {
if (this.isDist) {
this.hot = null;
}
}
constructor(meta) {
const clazz = meta.ctor;
registerHotUpdate(meta.ctor);
if (typeof clazz.main === 'function') {
setTimeout(() => {
this.onInitialize();
clazz.main();
}, 10);
}
}
}
exports.SpringBootApplication = SpringBootApplication;
exports.default = (0, Target_1.default)([ElementType_1.default.TYPE])(SpringBootApplication);
function registerHotUpdate(clazz) {
if (typeof require == 'function') {
const tracer = Tracer_1.default.getTracer(clazz);
const mod = (require.cache[tracer.id] || (require.main.filename == tracer.id ? require.main : null));
if (mod && !mod.hot) {
src_1.default.makeHash(mod.filename);
src_1.default.create(mod)
.preload((old) => {
if (old == mod) {
// 重启服务清理步骤
// 1. 移除所有模块缓存
Object.keys(require.cache).forEach((key) => {
const old = require.cache[key];
const isHotUpdater = old.exports.default == HotUpdaterReleaseManager_1.default;
if (isHotUpdater)
return;
delete require.cache[key];
});
// 2. 关闭http等需要释放的服务
HotUpdaterReleaseManager_1.default.destroy();
// 重置启动时间
process.emit('message', { type: 'RESET_NODE_MVC_STARTER_TIME' }, null);
}
});
}
}
}