可接受将要求(fs/http/等)保存在子模块的全局命名空间中

Acceptable to save requirements (fs/http/etc.) in global namespace for child module?

本文关键字:存在 模块 命名空间 全局 保存 fs 可接受 http      更新时间:2023-09-26

app.js:

global.fs = require('fs');
require('./process.js').init();

process.js

// Do stuff with `fs`
fs.realpathSync(...); // etc.

是否可以将fs保存在global下,以便process.js中的代码可以访问fs而不必重新要求它?

或者我应该采取其他方式吗?

我认为,对于一个用于一般分发的库来说,依赖于对任何事情使用全局变量通常是不可接受的。问题是,除非用户确切地知道库使用了哪些全局变量,否则它们可能会被覆盖(有意或无意),并导致应用程序或库出现意外行为。

在您的特定示例中,"process.js"应该可以再次要求该模块。由于node.js中模块的缓存行为,再次调用"require"的开销很小,并且可以保证获得与您通过全局传递的对象完全相同的对象(没有使用全局变量固有的风险)。

这是类似于node.js需要继承的问题吗?我认为你可以跳过全球,只做:

fs = require('fs'); // in app.js

fs将自动附加到global,并在process.js中可见。有些人更喜欢使用global进行可见性。

相关文章: