Articles of commonjs

CommonJS – 我如何将jquery和jquery-plugin结合到$命名空间中

我想要做的是适应我的jQuery插件在Node.js上使用jQuery。 据我所知,CommonJS是最基本的forms,需要一个库封装在一个闭包中,闭包应该作为“exports”参数的参数。 这样,代码被整齐地包含在它自己的命名空间中(通过一个命名variables),并且不会污染全局命名空间。 jQuery本身应该属于'$'命名空间。 翼: var $ = require(jquery); 但我的插件也应该符合'$'命名空间。 插件代码: (function( $ ) { // plugin code goes here })(jquery); exports.jquery = jquery // will this work? 例如: var $ = require(jquery); $ = require(jquery-csv.js); // will this work? 为了在浏览器中工作,即使我的模块被设置为'$'的子命名空间(即'$ .csv'),所有设置都可以从'$'命名空间调用。 有一个标准的方法来做一个单一的命名空间多个要求? 如果没有,有一个可行的替代(例如在插件代码上做一个浅拷贝)? 注意:匿名函数包装遵循标准的jquery准则 。 注意:此修补程序将应用于jquery-csv插件。

将每个模块组装成一个.js文件

我想尽量减less客户端在浏览器中加载脚本的HTTP请求数量。 这将是一个相当普遍的问题,但我仍然希望我能得到一些答案,因为JavaScript中的模块pipe理已经是一个痛苦。 现在的情况 现在,在开发中,每个模块都是从主html模板中单独请求的,如下所示: <script src="/libraries/jquery.js"></script> <script src="/controllers/controllername.js"></script> … 服务器在Node.js上运行,并根据请求发送脚本。 显然这是这样做的最不理想的方式,因为所有的模型,集合等也被分成它们自己的文件,这些文件翻译成许多不同的请求。 就研究而言 我遇到的库(使用AMD和CommonJS的RequireJS)可以向发送给客户端的主.js文件请求模块,但需要大量额外的工作才能使每个模块与每个库兼容: ;(function(factory){ if (typeof define === 'function' && define.amd) define([], factory); else factory(); }(function(){ // Module code exports = moduleName; })); 我的目标 我想在服务器上创build一个将所有模块连接在一起的文件。 如果我可以做到这一点,而不必添加更多的代码,已经存在的模块将是完美的。 然后,我可以简单地将这个单个文件提交给客户端。 这可能吗? 另外,如果我设法构build一个单独的文件,我应该在其中包含开源库(jQuery,Angular.js等)还是在客户端从外部cdn请求它们?

Yabble入门 – 浏览器端的CommonJS模块加载

有人熟悉Yabble或其他浏览器端CommonJS装载机? 我正在尝试Node.js,并非常想创build可在服务器端和客户端交换使用的Javascript模块。 这可能最终会比“因为它是实用而有用”的东西更像是“因为它很棒”而已。 因此,我基本上试图让CommonJS require()方法在浏览器端工作,这正是Yabble应该做的。 不过,我真的不知道从哪里开始。 除了Yabble的Github自述文件外,我似乎找不到任何文档,这没什么帮助。 基本上我所做的是把它放在一个HTML页面中 <script src="yabble.js"></script> <!– Uses require –> <script> require.setModuleRoot('http://localhost:8030/') my_module = require('my_module') </script> 但是,无论何时我调用require()函数,我Synchronous require() is not supported. 抛出exception。 有人可以帮我开始吗? 在哪里我应该加载yabble.js我应该打电话要求? 有没有一种特殊的方式来运行我的Javascript模块?

Nodejs:如何处理对象之间的事件监听?

我目前有问题,我有一个对象,应该听另一个对象。 问题是:我应该如何处理订阅? 目前,我只知道两种可能的方式: 与注册人: var Registrator = function() { this.listener = new Listener(); }; Registrator.prototype.register = function(subsriber) { var self = this; subscriber.on('event', function(info) { self.listener.doSomething(info); }); }; 在构造函数中: var Subscriber = function() { var listener = require('./instanced-listener'); this.on('event', function(info) { listener.doSomething(info); }); }; 正如你所看到的,两种方法都不是那么简洁。 还有另外一种模式可以用来解决这个问题吗? 问候 PS: 如果这个例子看起来太抽象了,这里是来源: https://github.com/bodokaiser/documents/blob/master/lib/repository.js 检查构造函数,看看我的不快:)

Module.export一个新的实例

如果我将一个对象附加到节点中的module.exports对象,如下所示: module.exports = new Object() 将每个object = require('./Object')在我的应用程序中创build该对象的新实例,或将创build一个实例的引用?

用Jest重置单个模块

jest.resetModules()清除所有模块的requirecaching,但有没有一种方法来清除它只是一个单一的模块? 因为Jest似乎绕过它,所以不能使用require.cache 。 我正在testing一个有状态的Node模块(即它依赖于多个调用require返回相同实例的事实)。 对于我的testing,我需要重置模块的状态来testing不同的场景。 jest.resetModules()作品,但我需要重新require一些其他嘲笑的模块,不需要重置。

架构查询..使用Node.js构build服务/消息总线

所以情况是,我有各种各样的数据源,从外部设备提供的消息stream..一些正在发送消息串口,一些通过UDP,一些通过Telnet ..我希望build立一个小的Node.js系统接收来自每个来源的消息。 大约有20个来源。 我有各种各样的地方,然后我要传递这些消息,我希望允许客户端通过telnet连接并接收这些消息。 我想你可以称之为“服务巴士”或“信息巴士”。 目前我只是围绕如何构build它的想法踢,我不想要一个巨大的node.js文件,它做的一切。 我希望每个“接收器”都在外部.js文件中,以我的主要node.js文件..是我的方法低于确定,有什么改进,我可以做我的方法。 主要Node.js文件 拉入两个“接收器”..每个这些将处理来自数据源的传入消息 var sys = require("sys"); AVLReceiver = require("./avlreceiver.js").AVLReceiver(); PagerReceiver = require("./pagerreceiver.js").PagerReceiver(); pagerreceiver.js – 一个示例消息接收器 从串口接收消息 var serialport = require("serialport"); var sys = require("sys"); var PagerReceiver = {}; PagerReceiver.initializePort = function () { this.serialport = new serialport.SerialPort("/dev/ttyS0", { parser: serialport.parsers.readline("\n"), baudrate: 57600 }); this.serialport.on("data", this.processMessage); }; PagerReceiver.processMessage = […]

在SystemJS加载器环境中将相对path映射到绝对path的方法

我正在使用SystemJS加载程序(与commonJS模块,但不应该是重要的),主要是直接访问node_modules下的node_modules 。 现在在运行时,是否有可能从相对位置查找当前环境中的绝对path? 也就是说,如果我require('./myComponent') ,它将获取http://localhost:3000/app/myComponent.js但如果通过npm install (因此驻留在node_modules下) npm install该组件,SystemJS将正确加载http://localhost:3000/node_modules/dist/myComponent.js 。 有没有办法从相对的一个查找这个绝对path? 即类似var absPath = SystemJS.lookup('./myComponent') ?

在JavaScript中定义全局对象的实现独立版本

我试图用JavaScript来定义global对象,如下所示: var global = this.global || this; 以上声明在全球范围内。 因此,在浏览器中, this指针是window对象的别名。 假设它是在当前网页上下文中执行的第一行JavaScript, global的值将始终与this指针或window对象的值相同。 在CommonJS实现中,如RingoJS和node.js, this指针指向当前的ModuleScope 。 但是,我们可以通过在ModuleScope上定义的global属性来访问global对象。 因此,我们可以通过this.global属性来访问它。 因此,这个代码片段适用于所有的浏览器,至lessRingoJS和node.js,但我没有testing其他的CommomJS实现。 因此,我想知道这个代码在其他CommonJS实现上运行时是否会产生正确的结果,如果有的话,我可以如何解决这个问题。 最后,我打算在一个lambdaexpression式中为我的实现独立的JavaScript框架使用它(如下所示)(来自jQuery的想法): (function (global) { // javascript framework })(this.global || this);

Node.js – 模块是否只初始化一次?

我正在使用node-mysql驱动程序的node.js应用程序。 我不需要反复为每个模型模块设置mysql连接,我这样做: // DB.js var Client = require('mysql').Client; var DB_NAME = 'test_db'; var client = new Client(); client.user = 'user'; client.password = 'pass'; client.connect(); client.query('USE '+DB_NAME); module.exports = client; // in User.js var db = require("./DB"); // and make calls like: db.query(query, callback); 现在,我注意到DB.js只用DB连接初始化一次。 所以,随后相同的client对象正在使用…我如何构造DB.js,以便当我需要从模型,每次一个新的数据库连接将build立? 我知道这跟使用new东西有关,但是我无法把头围绕在里面。