如何使变量和依赖项在节点应用程序的所有模块中可用?
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()
不像 那样连接文件。
如果您需要传递数据,例如配置、数据库或其他模块,那么您需要将其传递给模块。一个简单的例子是:
// 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);
当然还有很多不同的款式和图案。
您可以使用很多技巧,this article 涵盖了大部分技巧。
我经常将 单例 模式的变体用于应用程序全局上下文,例如数据库实例或记录器,然后只 require('./provider')
到每个相关文件中。您需要一个模块的所有文件都将获得该模块的相同实例。
依赖注入 是我其余时间使用的模式。
我最近构建了一个节点应用程序,并决定将其模块化。
我需要所有依赖项,声明一个在程序运行时由其他模块操作的数组,并在 app.js 文件中执行应用程序(该文件中不再有其他内容)。这意味着所有模块化文件函数都应该沿着作用域链进行,并且可以访问 app.js 中所需的包和变量,对吗?
但是,app.js 中定义和需要的包方法和变量将抛出未定义的错误。这意味着我正在创建的模块化文件无法访问我的 app.js 文件中所需的变量和包。
该程序在一个大型应用程序文件中运行良好。如果我将 app.js 中的所有依赖项和变量声明为全局变量,则代码可以正常工作。如果我在每个文件中都需要这些包,代码就会工作。
...所有这些解决方案都违背了模块化代码模式的目的...
你能告诉我一些关于使包和变量在节点应用程序的所有模块中可用而不会使全局范围混乱的资源吗?
谢谢!
不,那是不正确的。
模块默认封装,导出一个名为.. module.export
的对象。模块无权访问父模块的上下文(或变量)。
与 PHP 等语言不同,require()
不像 那样连接文件。
如果您需要传递数据,例如配置、数据库或其他模块,那么您需要将其传递给模块。一个简单的例子是:
// 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);
当然还有很多不同的款式和图案。
您可以使用很多技巧,this article 涵盖了大部分技巧。
我经常将 单例 模式的变体用于应用程序全局上下文,例如数据库实例或记录器,然后只 require('./provider')
到每个相关文件中。您需要一个模块的所有文件都将获得该模块的相同实例。
依赖注入 是我其余时间使用的模式。