Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js全局请求_Javascript_Node.js_Global Variables_Global_Require - Fatal编程技术网

Javascript Node.js全局请求

Javascript Node.js全局请求,javascript,node.js,global-variables,global,require,Javascript,Node.js,Global Variables,Global,Require,如何在全局范围内要求模块,以便在不同的模块中使用它,而无需再次要求它? 还是我每次都要这么做? 这方面有什么最佳实践吗 这是我所说的一个例子。 假设我有一个index.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('

如何在全局范围内要求模块,以便在不同的模块中使用它,而无需再次要求它? 还是我每次都要这么做? 这方面有什么最佳实践吗

这是我所说的一个例子。 假设我有一个index.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;
}
exports.return = function (msg) {
    console.log(msg);
}
utils.js

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

exports.change = function(str) {
    str = str.replace('test', 'example');
    utils.return('i changed test to example!');
    return str;
}
exports.return = function (msg) {
    console.log(msg);
}
你看,我必须要求('utils.js')两次,但我宁愿在index.js中要求一次,并将其作为utils在index.js和a.js中提供。
有什么好方法可以做到这一点吗?

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

可以在一组其他模块上制作一个不需要(
require()
)的模块,然后将结果合并到一个新的主模块中(如果相关或有用),这样其他模块只需要新的主模块

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


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

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

实际上我也有一个类似的问题(stackoverflow.com/questions/31196572/parse在NodeJS控制器中未定义)。期待着看到你问题的答案。这也可能解决我的问题。谢谢你的回答。问题是,我有一个高度模块化的项目,在其他模块中需要很多模块。这导致在我编写的每个模块的开头都有一大块require语句,这在我看来非常难看。我知道所需的模块是缓存的,这不是我真正的问题。我只想在每个模块中去掉那个巨大的require块。@JohnJackson-那么,你已经模块化了这么多,现在想用一堆全局变量来取消模块化?你能看到这里的讽刺吗?如果你愿意,你当然可以自由地使用globals,并以某种方式小心地控制加载顺序——我只是不知道有谁认为这是一个好的设计模式。而且,它首先打破了模块化的许多优势,因为使用全局的模块将不再是独立的和可使用的(没有一些主机首先创建适当的全局)。@JohnJackson-FYI,具有易于维护、可恢复和模块化的设计会带来一些成本。在本例中,听起来您已经将东西设计成了小型模块。实际使用它的剩余部分是在每个模块中插入必要的
require()
语句。如果你真的不喜欢,那么你就丢掉了模块化设计的大部分优点(除了有很多小文件)。模块化的最大优势在于易于重用,如果您依赖于一堆全局函数,您就不会有这种优势。