builder-isv
Version:
ISV 模块本地预览与云构建器
52 lines (42 loc) • 1.09 kB
JavaScript
/**
* @author 龙喜<xiaolong.lxl@alibaba-inc.com>
* @description 模块工厂
*/
;
const fs = require('fs');
const path = require('path');
const config = require('../config');
const Base = require('./base');
const Module = require('./module');
let singleton;
module.exports = class ModuleFactory {
constructor() {
if (singleton) {
return singleton;
}
singleton = this;
/**
* 模块 基于内存的 K-V store 缓存 :)
* @type {Object} {'type/name': 1}
*/
this.moduleCache = {};
}
/**
* 模块实例
* @param type
* @param name
* @param inputDir 当调用类型为 INVOKE_TYPE_BUILD 需传递此项
* @returns {*}
*/
getModule(type, name, inputDir) {
let module = this.moduleCache[`${type}/${name}`];
if (!module) {
if (inputDir) {
module = this.moduleCache[`${type}/${name}`] = new Module(inputDir, type, name, Base.INVOKE_TYPE_BUILD);
} else {
module = this.moduleCache[`${type}/${name}`] = new Module(null, type, name);
}
}
return module;
}
};