-
-
Save unscriptable/969416 to your computer and use it in GitHub Desktop.
// This boilerplate would allow a module to run in node.js or an | |
// AMD-enabled browser environment. On node.js, the syntax is: | |
// var Color = require("./Color").Color, | |
// color = new Color("#BADA55"); | |
// In the browser, the syntax is: | |
// var color = new Color("#BADA55"); // window.Color is implied | |
(function (define) { | |
define(function () { | |
function Color(){} | |
return Color; | |
}); | |
}( | |
// if define is not available, assume we're running in node.js | |
this.define || (function (exports, moduleId) { | |
return function (defFunc) { | |
exports[moduleId] = defFunc(); | |
} | |
})(this, 'Color') | |
)); |
// This boilerplate would allow a module to run in node.js or an | |
// AMD-enabled browser environment. On node.js, the syntax is: | |
// var Color = require("./Color").Color, | |
// color = new Color("#BADA55"); | |
// In the browser, the syntax is: | |
// var color = new Color("#BADA55"); // window.Color is implied | |
(function (define) { | |
define(["exports"], function (exports) { | |
exports.Color = function () {}; | |
}); | |
}( | |
// provide define if it's not available | |
this.define || (function (exports, moduleId) { | |
return function (ignoreMe, defFunc) { | |
defFunc(exports); | |
} | |
})(exports, 'myGlobalModule') | |
)); |
// This boilerplate would allow a module to run in node.js or an | |
// AMD-enabled browser environment. On node.js, the syntax is: | |
// var Color = new require("./Color")("#BADA55"); | |
// In the browser, the syntax is: | |
// var color = new Color("#BADA55"); // window.Color is implied | |
(function (define) { | |
define(function () { | |
function Color(){} | |
return Color; | |
}); | |
}( | |
// if define is not available, assume we're running in node.js | |
this.define || (function (module, moduleId) { | |
return function (defFunc) { | |
module.exports = defFunc(); | |
} | |
})(module, 'Color') | |
)); |
According to this document, the exports
free variable is also a property of the module
free variable. So I added yet another way to do it. Note: I have not tested it. I just got this off of http://visionmedia.github.com/masteringnode/book.html
All of the above examples had some issue for me. Either I had to settle for the differing server/browser construction or I got ReferenceError
s (for exports
) or something else.
However, I found https://github.com/kof/expose.js, included it at the top of my IIFE before my module definition and just added expose('ModuleName', ModuleDefinition);
and everything works as I wanted.
I cannot verify that it is AMD compliant but as a developer who had a working "module" and wanted it to work the same way in the server and the browser, ideally without dictating any API design choices, this is ideal.
I've updated https://gist.github.com/969908 to include expose.js
.
Now that I think I understand the goal, I updated my gist and added your version, which is a bit simpler (aka better).