export function asyncRequire(url: string, name?: string, type?: 'js' | 'css') { return new Promise((resolve, reject) => { const head = document.head || document.getElementsByTagName('head')[0] || document.body const filePath = url.split('?')[0] const ext = filePath.substring(filePath.lastIndexOf('.') + 1)
if (document.getElementById(`async-require-${name || 'unknown'}`)) { return resolve(name ? window[name] : 'loaded') }
let element: HTMLScriptElement | HTMLLinkElement if (ext == 'js' || type == 'js') { element = document.createElement('script') element.src = url element.onload = (e) => resolve(name ? window[name] : e) } else if (ext == 'css' || type == 'css') { element = document.createElement('link') element.rel = 'stylesheet' element.type = 'text/css' element.href = url element.onload = resolve } else { return console.warn('好像有点不对劲...请指定文件类型: js | css') }
element.id = `async-require-${name}` element.onerror = reject head.appendChild(element) })}