Articles of 模块化

如何正确模块化一个node.js项目?

我正在创build一个类构造函数模式下的node.js项目: function my_class(x,y){ this.x = x; this.y = y; } 该项目的起点是main.js文件。 任何类的项目都必须能够访问在main.js上定义的全局对象(比如“world”和“socket”)。 我发现了4个选项: 我在main.js定义了我的类。 他们可以访问main.js的全局variables来closures它,但main.js会变得臃肿。 我把这个类移动到另一个文件,如my_class.js并require()它。 这不起作用,因为my_class的实例将失去闭包上下文,不再能够访问main.js的全局variables。 我将该类移动到另一个文件中,并手动向其构造函数注入依赖项(例如: my_class(world,socket) )。 问题是,代码变得复杂得多,怪异的语义,比如“my_instance.world”在源代码上popup,这是无稽之谈,因为“world”不是my_class属性。 我将该类移动到另一个文件中,并且使用my_class = eval(fs.readFileSync(())而不是require 。这很好,因为my_class获取main.js的闭包上下文,并且是我正在使用的解决scheme,但似乎hacky。 模块化这种node.js项目的正确方法是什么?

打破单独的文件夹中的后续模型

我真正的问题是:是否有可能与单独的文件夹中的模型sequelize工作? 我这样问,因为我试图在我的应用程序中使用模块化结构,为了实现我需要的模型,控制器和path在同一个文件夹中,这就是我的意思: ├── node_modules ├── src │ ├── client │ │ └── … //Frontend things managed by angular (like views, etc…) │ └── server | ├── components | | ├── db | | | ├── migrations | | | | ├── users.js | | | | └── … | | | ├── seeders | | […]

NodeJS模块化

所以,我被告知在nodeJS中传递request和/或responsevariables是“不好的做法”。 但是这意味着你的大部分代码必须放在server.js文件中,使得它变得混乱和糟糕。 你怎样才能模块化你的nodejs服务器,恰当地传递req/res并且能够把你的代码组织成单独的文件? 例如,我想将我的套接字路由, .get和.post分成不同的文件,但仍然可以使用如下的callback参数: app.io.route("disconnect", function(req,res) { <— these params db.query("UPDATE player_data SET online=0 WHERE id="+mysql.escape(req.session.user)); req.io.broadcast("event", {msg:req.session.username+" has logged out!"}); app.io.broadcast("reloadXY"); }); 截至目前,他们都在一个文件,我不喜欢这样。

模块化编程和节点

更新1 :我在这一方面取得了很多进展。 我几乎放弃了(至less现在,但也许长期)允许用户上传模块的想法。 但是,我正在开发一个结构,以便可以定义和加载几个模块。 一个模块将被初始化,设置自己的路由,并有一个“公共”目录来提供Javascript服务。我越发现,我越发意识到我可以(应该)也移动现在系统范围内的调用在一个叫做“系统”的模块中。 更新2 :我已经在这方面取得了巨大的进展。 我即将在GitHub上提交大量的代码,这将允许人们使用Node和Express来完成非常好的模块化编程(模块公开了客户端和服务器端代码)。 敬请期待。 更新3 :我重写这个东西作为一个系统来注册模块,并使他们能够通过事件/钩子系统进行通信。 这是非常好的。 我有很多代码已经很好了 – 我只是把它移植到新的系统上。 请随时查看GitHub上的项目: https : //github.com/mercmobily/hotplate ) 更新4 :这是很好的。 事实certificate,我关于一个模块是客户端和服务器的想法是真正的工作。 更新5 :模块越来越接近可用的东西。 我实现了一个新的loader,它将考虑init()函数将调用的所有()函数,并确保提供该钩子的模块将被首先加载。 这开辟了一个全新的水平。 更新6 :烤盘现在接近12000行代码。 到二月份的某个时候,我想可能会接近20000行代码。 它做了很多东西,这一切都从StackOverflow开始! 我需要它来开发我自己的SaaS,所以我真的需要在二月份之前完成它(这样我可以冲刺到七月份,完成第一个版本的BookingDojo)。 谢谢大家! 我写的东西可能会变成一个相当大的软件。 简单的说就是nodejs + Express + Mongodb / Mongoose + Dojo(客户端)。 注:本文中的问题标记为[Q1],[Q2]等 来自Drupal的背景(并知道它是如何coooomplex进化的,我想避免的东西),我有点模块怪胎。 目前,我已经完成了应用程序的样板(hotplate: https : //github.com/mercmobily/hotplate )。 它做所有的无聊的东西(用户,工作区,密码提醒等),它缺less了几件。 我想提出一个devise,将允许与Drupal(但可能更好)类似的模块。 那是: 模块可以定义新的路线,并处理它们 模块安装在系统范围内,然后每个工作区都可以启用它们的集合列表 […]

如何模块化AngularJS应用程序/插件

我有一些关于从Grails(REST-API,AngularJS,MongoDB,Tomcat,Spock,几个插件的一部分)到Node.js + Angular.js的迁移(软件)架构问题。 我可能不得不解释一下Grails项目的结构,所以我们来看看: 有一个主要的Grails应用程序(在几个其他应用程序旁边),它build立在几个插件上。 每个插件都可以自行执行 – 这意味着它有自己的用户界面,单独的模板,服务,控制器,路由,testing等。它也托pipe在不同的存储库。 这是由Grails插件机制完成的。 其优点是testing工作量less,编译时间less,模块化,单一职责等。 但是,编译和testing的时间太昂贵了。 另外我不喜欢API提供模板/视图的一部分的事实。 我希望后端API“只是作为后端API”,而前端“只是作为前端”。 因此,每个AngularJS应用程序/插件将提供自己的视图,路线,服务等,但他们也可能依赖于其他插件。 所以我想达到如下: 一个主要的AngularJS应用程序,其中包括几个插件(一个插件可以像报告生成器,留言簿或任何其他应用程序的一个独立的部分,无论是与特定的路线,或只是一小部分的页面)。 每个插件必须是一个独立的AngularJS应用程序(可能在开发过程中通过grunt或其他)执行。 所以UI开发人员不需要启动整个后端应用程序,进一步说,我们可以只用JavaScript来运行functiontesting 只通过REST进行通信,前端必须从API中检索所有的数据 每个插件必须自行testing 插件可能需要其他插件才能工作 主要的index.html(和app.js?)可能由Nginx服务器提供,该服务器与后端(API)的其余部分分离, 尽pipe我头脑中有一个特定的图像,但我正在为如何设置这个架构而苦苦挣扎。 在Grails中,插件机制以某种方式合并插件依赖的设置(如URL映射,依赖关系等)到它们被包含/注入的主应用程序 – 这也是我想要用AngularJS实现的。 所以: AngularJS有一些相同的机制吗? 我该如何将每个插件的路由提供/合并到主应用程序中? 我怎样才能声明应用程序和插件的依赖? 什么工具可能是有用的构build过程? 如何build立插件资源(css / less文件,视图,服务等)的懒惰恢复? 阻止应用程序在启动时提供插件的所有资源(我猜路线在启动时是必需的) 由于这不仅仅是一个如何做这个或那个问题,我原谅自己,如果我失去了重要的部分,或者如果一些部分不够清楚。 只要问我,我会深入回答每个问题。