我想创建一个全局模块文件,然后让我的所有文件都需要该全局模块文件。在该文件中,我将加载所有模块一次并导出已加载模块的字典。
我该怎么做?
我实际上尝试创建此文件...每次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;
答案 0 :(得分:6)
var
)使用魔术全局变量,不使用var
。
示例:
fs = require("fs");
而不是
var fs = require("fs");
如果在声明变量时未放置var
,则变量将是魔法全局。
我不推荐这个。特别是,如果您处于严格模式("use strict"
),那根本不会起作用。
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);