【问题标题】:Acceptable to save requirements (fs/http/etc.) in global namespace for child module?可以在子模块的全局命名空间中保存需求(fs/http/etc.)吗?
【发布时间】:2011-06-21 18:28:16
【问题描述】:

app.js:

global.fs = require('fs');

require('./process.js').init();

process.js

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

是否可以将fs 保存在global 下,以便process.js 中的代码无需重新请求即可访问fs

或者还有其他方法我应该这样做吗?

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

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

    在您的具体示例中,“process.js”应该可以再次要求该模块。由于caching behavior of modules in node.js,再次调用“require”的开销是微不足道的,并且可以保证获得与通过全局变量完全相同的对象(没有使用全局变量所固有的风险)。

    【讨论】:

    • +1 表示它们已被缓存。一个以上的require 电话很便宜。
    【解决方案2】:

    这是与node.js require inheritance? 类似的问题,我认为您可以跳过全局并直接执行:

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

    fs 将自动附加到全局,并在 process.js 中可见。有些人更喜欢使用全局来获得可见性。

    【讨论】:

    • 不,不会的。 fs 写入 module.fs 而不是 global.fs。在 node.js 中,don't use var 使它成为模块全局而不是程序全局。
    猜你喜欢
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    • 2023-03-19
    • 2012-03-28
    • 2016-02-25
    • 1970-01-01
    相关资源
    最近更新 更多