Skip to content

Instantly share code, notes, and snippets.

@kaosat-dev
Forked from serapath/codepen.md
Created December 2, 2017 15:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kaosat-dev/799f3ee233fd943a7e80dfd3222842d4 to your computer and use it in GitHub Desktop.
Save kaosat-dev/799f3ee233fd943a7e80dfd3222842d4 to your computer and use it in GitHub Desktop.
A synchronous `require` function for the browser that downloads and caches modules from npm - just copy & paste it to the dev tools javascript console

use require in a codepen

  1. click on the little icon Open JS Settings on the JavaScript editor pane
  2. Then add the following link under Add External Javascript
https://cdn.rawgit.com/serapath/e2b55cab315e60fbbffea7b43acd8749/raw/a2709905ca06830f78d6069b97cda1f18eb9ef4c/require.js
  1. Press Save & Close and start using the require(...) in your JavaScript code on codepen

(For more detailed help, check: https://github.com/wizardamigos/app/blob/master/curriculum/newLessons/codepen.md)

window.require = (function (modules) {
var URL = 'https://wizardamigos-browserify-cdn.herokuapp.com/multi'
function init (name, _module) {
var se = document.createElement('script')
var module = JSON.parse(_module)[name]
se.text = module.bundle
document.head.appendChild(se)
document.head.removeChild(se)
module.exports = window.require(name)
window.require = require
return modules[name] = module
}
function require (name, version) {
var module = modules[name]
if (module) {
if (version) console.error('using cached version "' + module.package.version + '" of "' + name + '"')
return module.exports
}
version = version || 'latest'
var modulename = name + '@' + version + ':' + location.host
var _module = localStorage[modulename]
if (version === 'latest' && _module) {
var module = JSON.parse(_module)[name]
var oldstamp = module.timestamp
var newstamp = +new Date()
var age = (newstamp - oldstamp) / (1000*3600)
if (age > 24) _module = module = null
else return init(name, _module).exports
}
if (!_module) {
var xhr = new XMLHttpRequest()
xhr.open('POST', URL, false)
var data = { dependencies: { } }
data.dependencies[name] = version
xhr.send(JSON.stringify(data))
_module = xhr.responseText
module = JSON.parse(_module)[name]
module.timestamp = +new Date()
var m = {}
m[name] = module
_module = JSON.stringify(m)
localStorage[modulename] = _module
if (version === 'latest') {
version = module.package.version
modulename = name + '@' + version + ':' + location.host
localStorage[modulename] = _module
}
console.log('caching version "' + version + '" of "' + name + '" for one day')
}
return init(name, _module).exports
}
require.cache = modules
return require
})({})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment