smallest-script-loader
Version:
Smallest promise-based script loader with cache support
44 lines (39 loc) • 1.08 kB
JavaScript
(function (global, factory) {
if (typeof define === "function" && define.amd) {
define(['exports'], factory);
} else if (typeof exports !== "undefined") {
factory(exports);
} else {
var mod = {
exports: {}
};
factory(mod.exports);
global.index = mod.exports;
}
})(this, function (exports) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = loadScript;
const scripts = new Map();
/**
* Loads an external script
* @param {string} url Script's URL
* @returns {Promise}
*/
function loadScript(url) {
if (scripts.has(url)) {
return scripts.get(url);
}
const script = document.createElement('script');
script.async = true;
scripts.set(url, new Promise(function (resolve, reject) {
script.addEventListener('load', resolve);
script.addEventListener('error', () => reject(new Error(`Failed to load the script: ${url}.`)));
script.src = url;
document.body.appendChild(script);
}));
return scripts.get(url);
}
});