如何在 Vue 组件中更好的引入一个第三方 JS

在使用 Vue 开发项目的时候经常会用到一些不错的第三方库,但是有一些库并没有提供 npm 安装方式,没法使用 import 的方式引入。比如 vaptcha 手势验证码, vapthca 是一个使用比较多的第三方手势验证码,但是官方文档没有找到 npm 安装的方式。

通常在使用这种第三方库的时候会在在 index.html 文件中引入第三方库提供的 sdk。在 index.html 中引入 vaptcha 是全局使用,会应用到任何组件中,但是实际仅仅会在登录界面( login.vue )使用到 vapthca 。尽管 vaptcha 足够小,对页面加载影响小,但是请不要全局引入。

使用一个小技巧就可以实现按需应用,可以创建一个 vaptcha.js ,加入以下代码:

export function vaptcha () {
  return new Promise(function (resolve, reject) {
    const tag = document.getElementsByTagName('script')
    for (let i of tag) {
      if (i.src === 'https://v.vaptcha.com/v3.js') {
        resolve(window.vaptcha)
        return
      }
    }
    const script = document.createElement('script')
    script.type = 'text/javascript'
    script.src = 'https://v.vaptcha.com/v3.js'
    script.onerror = reject
    document.body.appendChild(script)
    script.onload = () => {
      resolve(window.vaptcha)
    }
  })
}

然后在 login.vue 中使用 import 引入:

import { vaptcha } from '~/extend/vaptcha'

initVaptcha 方法中使用

initVaptcha () {
  vaptcha().then((vaptcha) => {
    vaptcha({
      vid: 'xxxx', // 验证单元id
      type: 'invisible', // 显示类型 点击式
      scene: 1, // 场景值 默认0
      offline_server: 'xxxxx', // 离线模式服务端地址
      container: '#vaptcha-container' // 容器,可为Element 或者 selector
    }).then((obj) => {
      //
    })
  })
}

这样就仅会在 login.vue 中加载 vapthca.js ,而不会全局引入。

vue
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!