UNPKG

node-web-mvc

Version:
76 lines (75 loc) 2.54 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); /** * @module ModuleLoader * @description 模块装载工具 */ const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const src_1 = __importDefault(require("../../hmr/src")); const allowExtensions = { '.js': true, '.ts': true, }; class ModuleLoader { /** * 装载指定目录下对应模块 * @param dir 目录 * @param cache 缓存清单,如果文件已经加载过,则跳过加载, * 这里主要用解决windows下目录大小写导致同个模块存在两份。 */ constructor(dir, cache, exclude) { this.exclude = exclude || []; this.load(dir, cache || {}); } /** * 判断当前模块是否可加载 * @param id */ loadable(id) { const ext = path_1.default.extname(id); return (ext === '.js' || ext === '.ts'); } isExclude(id) { const exclude = this.exclude; if ((exclude === null || exclude === void 0 ? void 0 : exclude.length) < 1) { return false; } return exclude.some((e) => { return id.indexOf(e) > -1; }); } /** * 加载指定目录下模块 * @param dir 待加载目录 * @param cache 缓存配置 */ load(dir, cache) { const children = fs_1.default.lstatSync(dir).isDirectory() ? fs_1.default.readdirSync(dir) : [dir]; children.forEach((name) => { const id = path_1.default.isAbsolute(name) ? name : path_1.default.join(dir, name); const ext = path_1.default.extname(name); if (fs_1.default.lstatSync(id).isFile() && !allowExtensions[ext] || id.indexOf('/node_modules/') > -1 || id.indexOf('.d.ts') > 0) { return; } if (this.isExclude(id)) { console.log('ModuleLoader exclude:', id); // 如果需要排除 return; } if (fs_1.default.lstatSync(id).isDirectory()) { // 装载子目录 return this.load(id, cache); } else if (this.loadable(id) && !cache[id.toLowerCase()]) { // 装载 require(id); } }); } } exports.default = ModuleLoader; src_1.default.create(module).accept(() => { });