Created
November 8, 2014 04:44
-
-
Save anonymous/4837583657fb4e4f7d94 to your computer and use it in GitHub Desktop.
// source http://jsbin.com/tiriz
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta charset="utf-8"> | |
<title>JS Bin</title> | |
</head> | |
<body> | |
<script id="jsbin-javascript"> | |
//See https://github.com/togakangaroo/simple-modules | |
window.require = function(name) { | |
window.require._definedModules || (window.require._definedModules = {}); | |
if(!window.require._definedModules[name]) | |
throw Error("No such module " + name) | |
var currentRequires = window.require._currentRequires || (window.require._currentRequires = []); | |
if(~currentRequires.indexOf(name)) | |
throw Error("Circular dependency detected when requiring "+ name + ". The following modules were already required: " + currentRequires.join(', ')); | |
currentRequires.push(name); | |
var res = window.require._definedModules[name].instance || | |
(window.require._definedModules[name].instance = window.require._definedModules[name].definition()); | |
if(currentRequires.pop() != name) | |
throw Error("Something went wrong in dependency resolution when returning module "+name+ ". We're not sure how this happened.") | |
return res; | |
} | |
window.define = function(name, definition) { | |
window.require._definedModules || (window.require._definedModules = {}); | |
window.require._definedModules[name] = { | |
instance: null, | |
definition: definition | |
}; | |
} | |
//////////////////////////////////////////// | |
//Usage | |
//////////////////////////////////////////// | |
//First define your modules | |
define('A', function() { | |
console.log("Module A loaded"); | |
return function() { console.log("Module A return value invoked") } | |
}); | |
define('B', function() { | |
console.log("Module B loaded"); | |
return function() { console.log("Module B return value invoked") } | |
}); | |
define('C', function(){ | |
var a = require('A'); | |
var b = require('B'); | |
console.log("Module C loaded"); | |
return function(){ | |
console.log("Module C return value invoked"); | |
a(); | |
b(); | |
} | |
}) | |
define('D', function() { | |
var a = require('A'); | |
var c = require('C'); | |
console.log("Module D loaded"); | |
return function(){ | |
console.log("Module D return value invoked"); | |
a(); | |
c(); | |
} | |
}); | |
// Then require your top level one | |
var d = require('D'); | |
d(); | |
// Will detect circular references | |
define('Loop1', function(){ | |
require('Loop2'); | |
console.log("Loop1 loaded"); | |
}) | |
define('Loop2', function(){ | |
require('C'); | |
require('Loop3'); | |
console.log("Loop2 loaded"); | |
}) | |
define('Loop3', function(){ | |
require('Loop1'); | |
console.log("Loop3 loaded"); | |
}) | |
require('Loop1') | |
</script> | |
<script id="jsbin-source-javascript" type="text/javascript">//See https://github.com/togakangaroo/simple-modules | |
window.require = function(name) { | |
window.require._definedModules || (window.require._definedModules = {}); | |
if(!window.require._definedModules[name]) | |
throw Error("No such module " + name) | |
var currentRequires = window.require._currentRequires || (window.require._currentRequires = []); | |
if(~currentRequires.indexOf(name)) | |
throw Error("Circular dependency detected when requiring "+ name + ". The following modules were already required: " + currentRequires.join(', ')); | |
currentRequires.push(name); | |
var res = window.require._definedModules[name].instance || | |
(window.require._definedModules[name].instance = window.require._definedModules[name].definition()); | |
if(currentRequires.pop() != name) | |
throw Error("Something went wrong in dependency resolution when returning module "+name+ ". We're not sure how this happened.") | |
return res; | |
} | |
window.define = function(name, definition) { | |
window.require._definedModules || (window.require._definedModules = {}); | |
window.require._definedModules[name] = { | |
instance: null, | |
definition: definition | |
}; | |
} | |
//////////////////////////////////////////// | |
//Usage | |
//////////////////////////////////////////// | |
//First define your modules | |
define('A', function() { | |
console.log("Module A loaded"); | |
return function() { console.log("Module A return value invoked") } | |
}); | |
define('B', function() { | |
console.log("Module B loaded"); | |
return function() { console.log("Module B return value invoked") } | |
}); | |
define('C', function(){ | |
var a = require('A'); | |
var b = require('B'); | |
console.log("Module C loaded"); | |
return function(){ | |
console.log("Module C return value invoked"); | |
a(); | |
b(); | |
} | |
}) | |
define('D', function() { | |
var a = require('A'); | |
var c = require('C'); | |
console.log("Module D loaded"); | |
return function(){ | |
console.log("Module D return value invoked"); | |
a(); | |
c(); | |
} | |
}); | |
// Then require your top level one | |
var d = require('D'); | |
d(); | |
// Will detect circular references | |
define('Loop1', function(){ | |
require('Loop2'); | |
console.log("Loop1 loaded"); | |
}) | |
define('Loop2', function(){ | |
require('C'); | |
require('Loop3'); | |
console.log("Loop2 loaded"); | |
}) | |
define('Loop3', function(){ | |
require('Loop1'); | |
console.log("Loop3 loaded"); | |
}) | |
require('Loop1')</script></body> | |
</html> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//See https://github.com/togakangaroo/simple-modules | |
window.require = function(name) { | |
window.require._definedModules || (window.require._definedModules = {}); | |
if(!window.require._definedModules[name]) | |
throw Error("No such module " + name) | |
var currentRequires = window.require._currentRequires || (window.require._currentRequires = []); | |
if(~currentRequires.indexOf(name)) | |
throw Error("Circular dependency detected when requiring "+ name + ". The following modules were already required: " + currentRequires.join(', ')); | |
currentRequires.push(name); | |
var res = window.require._definedModules[name].instance || | |
(window.require._definedModules[name].instance = window.require._definedModules[name].definition()); | |
if(currentRequires.pop() != name) | |
throw Error("Something went wrong in dependency resolution when returning module "+name+ ". We're not sure how this happened.") | |
return res; | |
} | |
window.define = function(name, definition) { | |
window.require._definedModules || (window.require._definedModules = {}); | |
window.require._definedModules[name] = { | |
instance: null, | |
definition: definition | |
}; | |
} | |
//////////////////////////////////////////// | |
//Usage | |
//////////////////////////////////////////// | |
//First define your modules | |
define('A', function() { | |
console.log("Module A loaded"); | |
return function() { console.log("Module A return value invoked") } | |
}); | |
define('B', function() { | |
console.log("Module B loaded"); | |
return function() { console.log("Module B return value invoked") } | |
}); | |
define('C', function(){ | |
var a = require('A'); | |
var b = require('B'); | |
console.log("Module C loaded"); | |
return function(){ | |
console.log("Module C return value invoked"); | |
a(); | |
b(); | |
} | |
}) | |
define('D', function() { | |
var a = require('A'); | |
var c = require('C'); | |
console.log("Module D loaded"); | |
return function(){ | |
console.log("Module D return value invoked"); | |
a(); | |
c(); | |
} | |
}); | |
// Then require your top level one | |
var d = require('D'); | |
d(); | |
// Will detect circular references | |
define('Loop1', function(){ | |
require('Loop2'); | |
console.log("Loop1 loaded"); | |
}) | |
define('Loop2', function(){ | |
require('C'); | |
require('Loop3'); | |
console.log("Loop2 loaded"); | |
}) | |
define('Loop3', function(){ | |
require('Loop1'); | |
console.log("Loop3 loaded"); | |
}) | |
require('Loop1') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment