Articles of js amd

如何编写一个与Node.js,RequireJS一起工作的模块

我正在处理JSON / XML处理的JavaScript库。 我的图书馆工作在浏览器以及Node.js(与xmldom和xmlhttprequest模块)。 其中一名用户最近要求RequireJS支持。 我已经看了RequireJS / AMD的东西,认为这是一个很好的方法,所以我想提供这个。 不过,我想保留可移植性:我的库必须在浏览器(有和没有RequireJS)以及Node.js中工作。 而在浏览器环境中,我不依赖于xmldom或xmlhttprequest因为这些东西是由浏览器本身提供的。 我的问题是:如何实现我的库,以便它可以在浏览器以及Node.js中使用,而不需要RequireJS? 一点历史和我目前的解决scheme 我最初写我的浏览器库。 所以它只是创build一个全局范围的对象,并把它放在它的一切: var Jsonix = { … }; 稍后用户请求Node.js支持。 所以我补充说: if(typeof require === 'function'){ module.exports.Jsonix = Jsonix; } 我还不得不导入上面提到的几个模块。 我有条件地做了,取决于requirefunction是否可用: if (typeof require === 'function') { var XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest; return new XMLHttpRequest(); } 现在有了RequireJS这个故事。 如果RequireJS存在,那么require函数也存在。 但是,模块加载工作方式不同,我必须使用define函数等。我也不能只require东西,因为require在RequireJS有一个asynchronousAPI。 此外,如果我的库通过RequireJS加载,它似乎处理源代码,并检测require('something')即使我有条件地 if (typeof require === 'function' […]

如何使用带有Node.js和AMD的Backbone Model(浏览器上的require.js)

我目前有一个工作的AMD骨干模型使用require.js像这样: // models/game.js define(['backbone'], function(Backbone) { var Game = Backbone.Model.extend({ urlRoot : '/games/' , defaults : { name : null } }); return Game; }); AMD / Backbone组织来自本教程和jrburke的“骨干请求” 。 我也想在Node.js中使用Backbone Model,因为在不使用AMD的情况下,共享Backbone模型和集合在过去运行良好,显然我是一个受虐狂。 所以我尝试了以下(由Backbone mod启发): // models/game.js (function(root, factory) { if (typeof exports !== 'undefined') { factory(root, exports, require('backbone')); } else if (typeof define === 'function' && […]

摩卡+ RequireJS = AMDtesting

我有一个很难将摩卡连接到基于RequireJS的应用程序,可能你会想出一些东西:)。 几个小时后,我一直试图加载AMD模块,只是console.log一些'已解除'的信息,该模块已被加载…没有发生事情发生了 – 程序刚刚结束,打印出一些摩卡信息。 var facade = requirejs(['../../public/js/scripts/widgets/widgets/article/main.js'], function(mod) { console.log('fired') }); // run with: $ mocha -u tdd test.js –reporter spec 而且我想出了这个想法来testingcallback: setTimeout((function() { console.log('fired'); }), 5000); // run with: $ mocha -u tdd test.js –reporter spec 也没有工作。 所以最后我已经跑了 $ node test.js 最后它的工作。 所以问题是: 如何使用callback处理来运行Mochatesting,因为这些对于AMDtesting是必不可less的。