I have found a great post that explains the whole process.
http://ifandelse.com/its-not-hard-making-your-library-support-amd-and-commonjs/
In a nutshell, the author suggested the following pattern :
** Here, postal.js is a AMD/Commonjs compliant module.
(function (root, factory) {
if(typeof define === "function" && define.amd) {
// Now we're wrapping the factory and assigning the return
// value to the root (window) and returning it as well to
// the AMD loader.
define(["postal"], function(postal){
return (root.myModule = factory(postal));
});
} else if(typeof module === "object" && module.exports) {
// I've not encountered a need for this yet, since I haven't
// run into a scenario where plain modules depend on CommonJS
// *and* I happen to be loading in a CJS browser environment
// but I'm including it for the sake of being thorough
module.exports = (root.myModule = factory(require("postal")));
}
else { //node.js diverges from the CommonJS spec a bit by using module. So, to use it in other common js environments
root.myModule = factory(root.postal);}}(this, function(postal) {//passing this as the root argument, and our module method from earlier as the factory argument. If we run this in the browser, this, will be the window.
var sub;
var ch = postal.channel("myModule");
var myModule = {
sayHi:function() {
ch.publish("hey.yall", { msg: "myModule sez hai" });
},
dispose: function() {
sub.unsubscribe();
}};return myModule;}));