如何在节点应用程序的所有模块中提供变量和依赖项
How do you make variables and dependencies available in all modules of a node app?
我最近构建了一个节点应用程序,并决定将其模块化。
我需要所有的依赖项,声明一个在程序运行时由其他模块操作的数组,并在app.js文件中执行应用程序(该文件中已经没有太多其他内容了)。这意味着所有的模块化文件函数都应该发生在作用域链的下游,并且可以访问app.js中所需的包和变量,对吗?
然而,在app.js中定义和需要的包方法和变量会以未定义的形式抛出错误。这意味着我正在创建的模块化文件无法访问我的app.js文件中所需的变量和包。
该程序在一个大型应用程序文件中运行良好。如果我将app.js中的所有依赖项和变量声明为全局变量,那么代码就可以正常工作。如果我需要每个文件中的包,代码就会起作用。
所有这些解决方案都违背了模块化代码模式的目的。。。
你能告诉我一些关于在不扰乱全局范围的情况下使包和变量在节点应用程序的所有模块中可用的资源吗?
谢谢!
不,这是不对的。
默认情况下,模块被封装,导出名为..的对象。。CCD_ 1。模块无法访问父模块的上下文(或变量)。
与PHP等语言不同,require()
类似于串联文件。
如果需要传递数据,如config、db或其他模块,则需要将其传递给该模块。一个简单的例子是:
// app.js
var config = require('./config');
var db = require('./db').connect(config.DB_CONFIG);
var UsersModel = require('./usersModel')(db);
var someLogger = require('some-logger');
var logger = someLogger.init(config.SOME_OPTION);
当然,有许多不同的风格和图案。
有很多技术可以使用,本文涵盖了其中的大部分。
我经常为应用程序全局上下文(如数据库实例或记录器)使用singleton模式的变体,然后只将require('./provider')
放入每个相关文件中。所有需要模块的文件都将获得该模块的相同实例。
依赖注入是我其余时间使用的模式。
相关文章:
- 如何使用EnquireJS使AngularJS范围变量依赖于媒体查询
- jQuery插件使用Backbone.js和require.js - 如何将“this”变量传递给依赖项
- 离子选择不会更新依赖于作用域变量的功能
- 如何选择具有依赖于 javascript 变量的 id 的行
- 是否可以在运行依赖项之前在 gulp 任务中分配变量
- 如何更改依赖于变量的计时器
- Durandaljs 2.0 全局 JavaScript 变量和依赖 JavaScript 库
- 如何检测javascript函数的变量依赖关系
- 如何在节点应用程序的所有模块中提供变量和依赖项
- 试图将依赖于gulp环境的web包变量传递到angularjs应用程序中
- 当$scope.$watch表达式依赖于多个变量
- JavaScript, Ajax,Json:如何使用一个值依赖于Json响应的变量
- AngularJS如何在依赖提供商的$http成功函数中设置变量
- 如何使用RquireJS加载一个定义了全局变量并依赖于另一个第三方库的JS库
- 用mocha测试依赖于环境变量process.env.APP_ENV的配置模块
- 在制作多人游戏时,我是否依赖于浏览器不提供变量给玩家?
- 如何创建依赖于普通变量、函数或逻辑的ember属性
- RequireJS中的变量依赖
- AngularJS变量依赖于作用域中的另一个变量
- 带有敲除JS的变量依赖关系