Vue引入js文件

1,472 阅读1分钟

静态引入js文件

  1. HTML引入JS文件(es5)
// head或者body里面添加script标签,script标签内定义JS方法
<head>
    <script>
        function fn() {
            alert("orange");
        }
    </script>
</head> 
 
// head或者body里面添加script标签引入外部JS文件
<script type="text/javascript" src="../utils/orange.js"></script> 
  1. vue文件引入JS文件(es6)
// script标签内直接导入js文件
<script>  
    import { orange } from '../utils/orange.js'  
    export default {  
        data() {
            return {}
        }
    }  
</script>

动态态引入js文件

  1. HTML动态引入加载JS文件(es5)
// 动态创建script标签,并指定script的src属性
/**
* @param src {String} 文件路径
* @param onloadAtt {String} 无堵塞加载JS,异步加载属性(async、defer),async和defer不同之处是async加载完成后会自动执行脚本,defer加载完成后需要等待页面也加载完成才会执行代码;
* @param timeStemp {String | Number} 时间戳之类(用于减少资源请求以及确定当前版本)
* @param onloadFn {Function} script加载完成的回调函数
* @param onerrorFn {Function} script加载失败的回调函数
*/
function createScript(src, onloadAtt, timeStemp, onloadFn, onerrorFn) {
    src += '?timeStemp=' + timeStemp;
    var script = document.createElement('script');
    script.setAttribute('type', 'text/javascript');
    script.setAttribute('src', src);
    if (onloadAtt) { // 是否无堵塞加载JS
        script.setAttribute(onloadAtt, true);
        // script[onloadAtt] = true;
    }
    script.onload = onloadFn; // 添加加载完毕函数
    
    // 注意!!! 虽然HTML5规定了<script>元素的onerror时间处理程序,但还没有被任何浏览器实现
    script.onerror = onerrorFn; // 添加加载失败函数
    document.head.appendChild(script);
}

// 执行
createScript('../utils/orange.js', '', 9527, () => {
    console.log('js加载成功')
}, () => {
    console.log('js加载失败')
})
  1. vue文件动态引入加载JS文件(es6)
export default {
    data() {
        return {}
    },
    created() {
        // 动态引入js
        import('../utils/orange.js')
            .then(result => {
                this.$nextTick(() => {
                     console.log('result: ', result)
                     console.log('引入成功!')
                })
            })
            .catch(e => {
                console.log('e: ', e)
                console.log('引入失败!')
            })
    }
}
  1. 做个优化,搞个预加载,配合script标签使用
function createLink(url, timeStemp) {
	var href = url + '?timeStemp=' + timeStemp;
	var link = document.createElement('link');
	link.setAttribute('rel', 'modulepreload');
	link.setAttribute('href', href);
	document.head.appendChild(link);
}

总结:个人觉得有条件的话优先使用es6的语法,比较好用而且比较少问题。