在其他地方初始化 'mymodule' 后调用 require('mymodule') 是否正确?
Is calling require('mymodule') correct after initializing 'mymodule' somewhere else?
假设我有一个模块通过一些配置连接到数据库。我不想传递配置或加载的模块,我只想在我的主模块(此处为 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
方法正确。 JS模块一般情况下只会求值一次,这种情况下可以用一次。
注意在database
模块将在其他模块中使用之前需要初始化配置:
const { init } = require('./database.js');
init(config);
require('some-module-that-uses-database');
是的,没关系。 NodeJS 的 require
和 ES6 的 import
在它们的规范中都定义为只加载给定的模块一次。之后任何试图导入相同代码的 require
/ import
语句将简单地 return 引用第一次加载的 "cached" 版本,这意味着所有模块which load 它将引用同一个对象,并且可以访问其他模块对其所做的任何更改。
假设我有一个模块通过一些配置连接到数据库。我不想传递配置或加载的模块,我只想在我的主模块(此处为 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
方法正确。 JS模块一般情况下只会求值一次,这种情况下可以用一次。
注意在database
模块将在其他模块中使用之前需要初始化配置:
const { init } = require('./database.js');
init(config);
require('some-module-that-uses-database');
是的,没关系。 NodeJS 的 require
和 ES6 的 import
在它们的规范中都定义为只加载给定的模块一次。之后任何试图导入相同代码的 require
/ import
语句将简单地 return 引用第一次加载的 "cached" 版本,这意味着所有模块which load 它将引用同一个对象,并且可以访问其他模块对其所做的任何更改。