Skip to content

Instantly share code, notes, and snippets.

@ymatuhin
Last active August 19, 2016 14:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save ymatuhin/28bb590aa09a87593f70201eb61d1c29 to your computer and use it in GitHub Desktop.
Save ymatuhin/28bb590aa09a87593f70201eb61d1c29 to your computer and use it in GitHub Desktop.
// modules.js
const Modules = (function() {
const config = { base: '' }
const modulesPromises = {}
function loadModule(url) {
if (modulesPromises[url]) return modulesPromises[url]
return modulesPromises[url] = new Promise((res, rej) => {
ajaxGET(config.base + url, (moduleText) => {
const moduleExports = evalModule(url, moduleText)
res(moduleExports)
}, rej)
})
}
function evalModule(url, moduleText) {
const module = { exports: null };
(function(module) {
eval(moduleText)
})(module)
return module.exports
}
function ajaxGET(url, success, error) {
var request = new XMLHttpRequest()
request.open('GET', url, true)
request.onload = function() {
if (request.status >= 200 && request.status < 400) success(request.responseText)
else error(request)
}
request.onerror = error
request.send()
}
return {
load: loadModule
}
})()
Modules.load('export.js').then(module => {
console.log(`# module`, module)
// { q: 1, w: 2 }
})
Modules.load('export.js').then(module => {
console.log(`# module`, module)
// { q: 1, w: 2 }
})
Modules.load('export.js').then(module => {
console.log(`# module`, module)
// { q: 1, w: 2 }
})
// export.js
module.exports = {
q: 1,
w: 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment