登录
最下面是使用 js 原生写的动态加载js文件的功能。
/**
* 动态加载 js 资源
* @param {Array} jsArr 要加载的js地址
* @returns
*/
export function loadJs(jsArr) {
let headDom = document.querySelector('head')
let promiseArr = []
jsArr.forEach(jsSrc => {
promiseArr.push(new Promise((resolve, reject) => {
let scriptDom = document.createElement('script')
scriptDom.src = jsSrc
scriptDom.onload = () => {
headDom.removeChild(scriptDom)
resolve()
}
scriptDom.onerror = () => {
headDom.removeChild(scriptDom)
reject()
}
headDom.appendChild(scriptDom)
}))
})
return Promise.all(promiseArr)
}
下面介绍一个 js 资源的动态加载的工具「LAB」,官方 github:https://github.com/getify/LABjs。
和直接使用 js 创建 script 标签引入 js 资源的方式不同的是,LAB 支持**「并行加载+顺序执行」**,它能像加载 html 时使用 script 标签加载 js 一样,同时下载多个 js 文件,但最后按顺序依次执行。
比如:
<script src="jquery.js"></script>
<script src="plugin_1.js"></script>
<script>
console.log('一半');
</script>
<script src="plugin_2.js"></script>
<script>
console.log('最终');
</script>
效果等同于以下代码:
<script src="LAB.min.js"></script>
<script>
$LAB.script('jquery.js')
.wait(() => {
console.log('一半');
}).script('plugin_1.js', 'plugin_2.js')
.wait(() => {
console.log('最终');
})
</script>
LAB 最常用的主要是 .script() 方法和 .wait() 方法:
所以,在需要加载多个 js 资源时,使用 LAB 能更可控的引入。