可接受将要求(fs/http/等)保存在子模块的全局命名空间中
Acceptable to save requirements (fs/http/etc.) in global namespace for child module?
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进行可见性。
相关文章:
- Javascript-如何读取json文件中的列并将其保存在Javascript数组中
- Javascript,访问一个主要对象模块模式中的每个对象
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- Jquery菜单操作不稳定,定位不正确,存在一般错误
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- 如何从模块链中调用函数.导出到节点中
- 尽管链接成功并已成功下载,但未找到NPM模块
- 节点可以'找不到父node_modules文件夹中存在的模块
- AngularJS - Grunt:是否存在一种解决方案来构建仅包含所需模块的正在运行的应用程序
- 使用System.js,为什么我对一个文件中的模块所做的更改会在另一个文件上持续存在
- babel 5和babel 6之间发生的事情导致我导入的模块存在于对象的默认属性之外
- 早午餐js检查模块在需要之前就存在
- 是否存在“;“同步”;JavaScript应用程序的模块定义框架
- 在Angular.js中,是否存在任何限制服务的方法's对一个模块或一个'类'模块
- 如何将所有已安装的节点模块保存在package.json中?
- 是否存在创建SQL查询构建器接口的jQuery或JavaScript模块?
- AngularJS使用NG-IF检查模块是否存在
- 名字'$'在当前作用域中不存在——typescript和jquery在一个模块中
- 是否有一种方法可以触发调用另一个模块中的方法,该方法“可能”.存在
- Brackets.io扩展中存在模块不存在错误