gpt4 book ai didi

javascript - Node.js 全局要求

转载 作者:数据小太阳 更新时间:2023-10-29 04:05:13 24 4
gpt4 key购买 nike

我怎样才能在全局范围内 require 一个模块,这样我就可以在不同的模块中使用它而不必再次 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;
}

utils.js

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

你看我必须要求('utils.js')两次,但我宁愿在 index.js 中要求它一次,并在 index.js 和 a.js 中作为实用程序提供它。有什么好的方法可以实现吗?

最佳答案

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

可以制作一个模块,对一堆其他模块执行 require(),然后将结果组合到一个新的主模块(如果相关或有用),这样其他模块只需要需要新的主模块。

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


我个人不推荐这样做,因为它会扰乱模块化,但在您的具体示例中,您还可以将 utils 模块传递给 a.js 构造函数:

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

关于javascript - Node.js 全局要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31211531/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com