Node.js-require()d模块的范围是什么?

cod*_*ent 5 require node.js requirejs express

我试图组织一个用Express 4开发的Node.js应用程序,并且对用require()导入的模块范围感到困惑。

想象一下,我用来require('./services/user')在模块中导入服务,例如route / user.js:

var userService = require('./services/user');
Run Code Online (Sandbox Code Playgroud)

然后,require('./services/user')在另一个模块route / department.js中执行相同的操作。

我的问题是:userService是user.js和department.js中的相同实例,还是每个实例都有其自己的userService对象?也就是说,如果您需要相同的文件,则通过module.exports = XXX导出了某些元素后,是否将始终获得相同的实例?您能告诉我在Node.js文档中指定的位置吗?

Dra*_*SAN 5

如果我正确理解你的问题,你有这些文件:

.
|_. app.js
|_. routes/
  |_. user.js
  |_. department.js
  |_. services/
    |_. user
Run Code Online (Sandbox Code Playgroud)

你的代码这样做:

app.js call user.js
    user.js call user
app.js call department.js
    department.js
Run Code Online (Sandbox Code Playgroud)

在这种情况下,第一次需要用户时,它会被放入缓存中require.cache。

然后第二次调用时,调用者 get require.cache['./service/user'],您的对象存储在哪里。

因此,department.js 和 user.js 中确实有相同的对象。

来源:

编辑:

其他有用的链接:

node.js require() 缓存 - 可能无效吗?