在其他地方初始化“ mymodule”后,调用require('mymodule')是否正确?

时间:2019-01-14 06:53:40

标签: javascript node.js commonjs

假设我有一个使用某种配置连接到数据库的模块。我不想传递配置或加载的模块,我只想在我的主模块(此处为app.js)中初始化database.js模块,然后可以在代码的其他地方使用它而无需初始化或传递配置。

我的问题是,就此link

中所说的而言,这种方法是否正确?

这里是例子。

// database.js

const mongodb

let config = null;

exports.init = (conf) {
    config = conf;
}

exports.getConnection = () {
    const MongoClient = mongodb.MongoClient;
    return new MongoClient(config.mongodb.url);
}

// app.js

const { init } = require('./database.js');

// load config ...

init(config);

// lib文件夹中的某些模块

const { getConnection } = require('../../database.js');

// do something with getConnection

2 个答案:

答案 0 :(得分:1)

方法是正确的。正常情况下,JS模块只评估一次,这种情况只能使用一次。

请注意,在将database模块用于其他模块之前,必须先初始化配置:

const { init } = require('./database.js');

init(config);

require('some-module-that-uses-database');

答案 1 :(得分:1)

是的,很好。 NodeJS的require和ES6的import都在其规范中定义为仅加载给定模块一次。尝试导入相同代码的语句之后的任何require / import语句都将仅返回对第一次加载的内容的“缓存”版本的引用,这意味着所有加载它的模块都将引用同一对象,并可以访问其他模块对其所做的任何更改。