本系列文章的思想,都融入了 让 Java 再次伟大 这个全新设计的脚手架产品中,欢迎大家使用。
单例模式与模块系统
Node 的单例模式既特殊又简单——凡是从模块中导出的实例天生就是单例。
// database.js
function Database(connect, account, password) {
this.connect = connect;
this.account = account;
this.password = password;
}
const database = new Database("localhost", "root", "123456");
export default database;
// index.js
import database1 from "./database.js";
import database2 from "./database.js";
console.log(database1 === database2); // true
这是由于 Node.js 加载完某个模块后,会创建模块与模块标识符
(module specifier) 的映射关系并将其缓存起来供后续使用,就像下面这样:
pseudo code (CommonJS module)
function loadModule(filename, module, require) {
const wrappedSrc = `(function(module,exports,require) {
${
fs.readFileSync(filename, "utf8")}
})(module,module.exports,require)`;
eval(wrappedSrc);
}
function require(moduleName) {
const id = require.resolve(moduleName);
// 加载缓存
if (require.cache[id]) {
return require.cache[id].exports;
}
const module = {