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

时间:2013-12-15 19:51:31

标签: javascript node.js require

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

我该怎么做?

我实际上尝试创建此文件...每次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;

2 个答案:

答案 0 :(得分:6)

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

使用魔术全局变量,不使用var

示例:

fs = require("fs");

而不是

var fs = require("fs");

如果在声明变量时未放置var,则变量将是魔法全局

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

2。使用global.yourVariable = ...

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

所以,你可以这样做:

global.fs = require("fs");

这不像 1。那么糟糕,但在可能的情况下仍然可以避免。


对于你的例子:

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

server.js中你会这样做:

require("./global_modules");

并在global_modules.js中您将拥有:

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

global._modules = {...}

server.js中你可以做到:

_modules.account_controller // returns require('/account/controller.js'),

答案 1 :(得分:4)

require已经做到了。尝试加载模块,修改它,然后再将其加载到另一个地方或文件中:

var fs = require('fs'):
console.log(fs.hey);
fs.hey = 'HEY TIMEX, WHATS UP?';
//another place of the same process
var fs = require('fs');
console.log(fs.hey);