UNPKG

node-web-mvc

Version:
60 lines (59 loc) 2.66 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = hotUpdate; const src_1 = __importDefault(require("../../hmr/src")); const RuntimeAnnotation_1 = __importDefault(require("../annotations/annotation/RuntimeAnnotation")); const Component_1 = __importDefault(require("../../ioc/annotations/Component")); const Tracer_1 = __importDefault(require("../annotations/annotation/Tracer")); const BeanDefinition_1 = __importDefault(require("../../ioc/factory/BeanDefinition")); // 开发模式热更新 function hotUpdate(getBeanFactory, registerWithAnnotation, createSingletonBeans) { const updateFiles = []; const removeKeys = []; src_1.default .create(module) .clean() .preload((old) => { var _a; updateFiles.push(old.filename); const beanFactory = getBeanFactory(); for (const key of beanFactory.getBeanDefinitionNames()) { const definition = beanFactory.getBeanDefinition(key); const tracer = Tracer_1.default.getTracer(definition.clazz || definition.methodClazz); if ((_a = tracer === null || tracer === void 0 ? void 0 : tracer.isDependency) === null || _a === void 0 ? void 0 : _a.call(tracer, old.filename)) { // 记录需要移除的内容 removeKeys.push(key); } } }) .allDone(() => { const beanFactory = getBeanFactory(); removeKeys.forEach((key) => { const definition = beanFactory.getBeanDefinition(key); if (definition) { // 移除Bean定义对应的实例对象 beanFactory.removeBeanInstance(definition); // 移除Bean定义 beanFactory.removeBeanDefinition(key); } }); const annotations = RuntimeAnnotation_1.default.getAnnotations(Component_1.default); annotations.forEach((annotation) => { const tracer = Tracer_1.default.getTracer(annotation.ctor); const beanName = BeanDefinition_1.default.toBeanName(annotation.ctor); if (!tracer) return; if (!beanFactory.containsBean(beanName)) { // console.log('register:', annotation.ctor.name); // 重新注册热更新过的Bean定义 registerWithAnnotation(annotation); } }); createSingletonBeans(); updateFiles.length = 0; removeKeys.length = 0; }); }