在Vue中,通常咱们引入一个js插件都是应用npm 形式下载而后import应用的。然而我当初本地有了js文件或者是一个近程js文件链接,我不想应用npm install xxx 的形式,有什么方法吗?

办法1

简略粗犷,间接在Vue我的项目的index.html 中应用全局的形式引入,比方:

<!DOCTYPE html><html><head>    <!-- ... 省略--></head><body>    <div id="app"></div></body><script src="../xxx.js"></script> // 暴力引入</html>

毛病:不应用该js插件的组件也会加载,而我只想在某个Vue组件中应用该js插件。


办法2

如果是下载到本地的动态文件,能够应用import 的形式导入。

import { xxx } from '门路' 

毛病:下载的动态文件才能够


办法3

在Vue组件加载完后,手动操作DOM插入js插件。

export default {    mounted() {        let script = document.createElement('script');        script.type = 'text/javascript';        script.src = '你的js文件地址';        document.body.appendChild(script);    },}

该形式间接操作DOM,只在以后组件插入js插件。


办法4

应用render办法

export default {    components: {        'xxx-js': {            render(createElement) {                return createElement(                    'script',                    {                        attrs: {                            type: 'text/javascript',                            src: '你的js文件地址',                        },                    },                );            },        },    },}// 应用 <xxx-js></xxx-js> 组件形式在页面中调用

办法5

高阶玩法。将形式三包装成一个js插件,应用 Promise,js加载胜利,调用resolve,js加载失败,调用reject。

function loadJs(src) {  return new Promise((resolve,reject)=>{    let script = document.createElement('script');    script.type = "text/javascript";    script.src= src;    document.body.appendChild(script);          script.onload = ()=>{      resolve();    }    script.onerror = ()=>{      reject();    }  })} export default loadJs

应用的时候:

import loadJs from '../../utils/base/loadJs'   export default {    mounted(){        loadJs('http://api.map.baidu.com/xxx.js').then(()=>{            // 加载胜利,进行后续操作        })    }}

办法6

更高阶形式。能够动静替换要加载的js文件。

包装一个importJs.js 插件。

// 导入内部jsimport Vue from 'vue' Vue.component('remote-script', {  render: function (createElement) {    var self = this;    return createElement('script', {      attrs: {        type: 'text/javascript',        src: this.src      },      on: {        load: function (event) {          self.$emit('load', event);        },        error: function (event) {          self.$emit('error', event);        },        readystatechange: function (event) {          if (this.readyState == 'complete') {            self.$emit('load', event);          }        }      }    });  },  props: {    src: {      type: String,      required: true    }  }});

应用形式:

// 引入import '@/common/importJs.js'// html应用的中央<remote-script src="js文件门路"></remote-script>