繁体   English   中英

如何使变量和依赖项在节点应用程序的所有模块中可用?

[英]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中的所有依赖项和变量声明为全局变量,则代码可以正常工作。 如果我在每个文件中都需要软件包,则代码将起作用。

...所有这些解决方案都无法达到模块化代码模式的目的...

您能否指导我一些资源,以使包和变量在节点应用程序的所有模块中可用,而又不会使全局范围混乱?

谢谢!

不,那是不正确的。

默认情况下,模块被封装,导出一个名为module.export的对象。 模块无权访问父模块的上下文(或变量)。

不同于像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);

当然,有许多不同的样式和样式。

您可以使用很多技术, 本文涵盖了其中大多数。

我经常在应用程序全局上下文中使用单例模式的变体,例如数据库实例或记录器,然后将require('./provider')放入每个相关文件中。 您需要一个模块进入的所有文件都将获得该模块的相同实例。

依赖注入是其余时间使用的模式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM