vue动态获取远程esm js文件的内容

2023-08-29  本文已影响0人  西木木亢
import * as Lodash from 'lodash-uni'
import dayjs from 'dayjs'
import { loadModule } from 'vue3-sfc-loader'

const loadModuleOptions = {
  moduleCache: {
    'lodash-uni': Lodash,
    'dayjs': dayjs
  },
  async getFile(url) {
    const packageUrl = url.replace('.mjs', '.js')
    const { resourcesUrl } = JSON.parse(localStorage.getItem('CDN_CONFIG'))
    const baseUrl = resourcesUrl.slice(0, resourcesUrl.lastIndexOf('/'))
    const fullUrl = `${baseUrl}${packageUrl}`
    const res = await fetch(fullUrl)
    if (!res.ok) throw new Error(res.statusText)
    return {
      getContentData: (asBinary) => (asBinary ? res.arrayBuffer() : res.text())
    }
  },
  addStyle: () => {}
}

const loadCodeFunction = async (packageName, packageUrl) => {
  try {
    const module = await loadModule(packageUrl.replace('.js', '.mjs'), loadModuleOptions)
    setCodeFunctions(packageName,  module)
  } catch (e) {
    console.error('initCodeFunctions error', e)
  }
}

// 远程js文件内容

import dayjs from "dayjs"
import {
  isNumber,
  toNumber,
  sum
} from 'lodash-uni'
//  仅支持使用以上2个依赖提供的方法

function fn1(a, b) {
  console.log(dayjs('2020-02-02 12:00:00').format('YYYY-MM-DD'))
  console.log('isNumber', isNumber('1.234')
  return a / b
}

function fn2(a, b) {
  console.log(isNumber(1111))
  return a * b
}

function sumArray(array) {
  return sum(array)
}
export { // 请使用相同的导出方式,不要加default
  fn1,
  fn2,
  sumArray
}
上一篇 下一篇

猜你喜欢

热点阅读