在Node.js中,如何加载我的模块一次,然后在整个应用程序中使用它们?

TIM*_*MEX 4 javascript require node.js

我想创建一个全局模块文件,然后让我的所有文件都需要该全局模块文件.在该文件中,我将加载所有模块一次并导出已加载模块的字典.

我怎样才能做到这一点?

我实际上尝试创建这个文件...每次我require('global_modules'),所有模块都在重新加载.这是O(n).

我希望文件是这样的(但它不起作用):

//global_modules.js - only load these one time
var modules = {
    account_controller: '/account/controller.js',
    account_middleware: '/account/middleware.js',
    products_controller: '/products/controller.js',
    ...
}
exports.modules = modules;
Run Code Online (Sandbox Code Playgroud)

Ion*_*zău 6

1.使用魔术变量(声明没有var)

没有使用魔法全局变量var.

例:

fs = require("fs");
Run Code Online (Sandbox Code Playgroud)

代替

var fs = require("fs");
Run Code Online (Sandbox Code Playgroud)

如果var在声明变量时没有放置,变量将是一个神奇的全局变量.

推荐这个.特别是,如果你处于严格模式("use strict"),那根本不会起作用.

2.使用 global.yourVariable = ...

附加到global对象的字段将成为可从应用程序中的任何位置访问的全局变量.

所以,你可以这样做:

global.fs = require("fs");
Run Code Online (Sandbox Code Playgroud)

这并不像1.,但在可能的情况下仍然可以避免.


对于你的例子:

假设您有两个文件:( server.js主文件)和global_modules.js文件.

server.js你会做这样的:

require("./global_modules");
Run Code Online (Sandbox Code Playgroud)

global_modules.js您将有:

_modules = {
    account_controller: require('/account/controller.js'),
    account_middleware: require('/account/middleware.js'),
    products_controller: require('/products/controller.js'),
    ...
}
Run Code Online (Sandbox Code Playgroud)

要么

global._modules = {...}
Run Code Online (Sandbox Code Playgroud)

server.js你将能够做到:

_modules.account_controller // returns require('/account/controller.js'),
Run Code Online (Sandbox Code Playgroud)