Node.js全局需求



我如何全局地需要一个模块,这样我就可以在不同的模块中使用它,而不必再次需要它?还是我每次都要这么做?对此有什么最佳实践吗?

这是我所说的一个例子。假设我有一个索引.js,如下所示:

var a = require('a.js'),
utils = require('utils.js');
var str = 'hello this is a test';
str = a.change(str);
utils.return(str);

a.js

var utils = require('utils.js');
exports.change = function(str) {
    str = str.replace('test', 'example');
    utils.return('i changed test to example!');
    return str;
}

utils.js

exports.return = function (msg) {
    console.log(msg);
}

你看,我必须要求('utils.js'(两次,但我宁愿在index.js中要求一次,并将其作为utils提供给index.js和a.js。有什么好方法可以做到这一点吗?

nodejs开发中的通常做法是只在每个需要的模块中require()一个模块。模块本身由nodejs缓存,因此每次都会返回相同的模块,而实际上并没有反复加载。这样做而不是创建全局,通常会使代码更加模块化和可重用,因为每个模块都唯一地指定(使用require()语句(它需要什么,而不是拥有一堆依赖于一些预先存在的全局配置的模块,这会产生更多的依赖性、加载顺序问题等

可以制作一个单独的模块,在一堆其他模块上执行require(),然后将结果组合到一个新的主模块中,如果这是相关的或有用的,那么其他模块只需要新的主模件。

不建议使用全局变量来代替仅使用require()语句。请记住,在nodejs编程中,大多数require()语句只是在服务器初始化时运行,并且它们是缓存的,因此没有什么理由避免使用require()而不是全局变量所带来的好处和模块化。


我个人不建议这样做,因为它会干扰模块性,但在您的特定示例中,您也可以将utils模块传递给.js构造函数:

var utils = require('utils.js');
var a = require('a.js')(utils);

对于将来在谷歌上搜索此问题的人,您可以使用global变量。只有在真正特定的地方才能做到这一点(例如:在每个文件中复制代码(

global.mymodule = require("mymodule");
mymodule.abc // works in any file in the same process

相关内容

  • 没有找到相关文章

最新更新