static.ts 1.0 KB
Newer Older
fxy060608's avatar
fxy060608 已提交
1 2 3 4 5 6 7
import debug from 'debug'
import { Plugin, ResolvedConfig } from 'vite'

import { cleanUrl } from '@dcloudio/uni-cli-shared'
import { UniPluginFilterOptions } from '.'
import { createPublicFileFilter } from '../../utils'

fxy060608's avatar
fxy060608 已提交
8
const debugStatic = debug('uni:static')
fxy060608's avatar
fxy060608 已提交
9 10 11 12 13 14 15 16 17 18 19 20
/**
 * 提供static等目录静态资源加载
 * @param _options
 * @param config
 * @returns
 */
export function uniStaticPlugin(
  _options: UniPluginFilterOptions,
  config: ResolvedConfig
): Plugin {
  const filter = createPublicFileFilter()
  return {
fxy060608's avatar
fxy060608 已提交
21
    name: 'uni:static',
fxy060608's avatar
fxy060608 已提交
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
    resolveId(id) {
      if (!config.assetsInclude(cleanUrl(id))) {
        return
      }
      const publicFile = filter(id)
      if (publicFile) {
        debugStatic(id)
        return id
      }
    },
    async load(id) {
      if (!config.assetsInclude(cleanUrl(id))) {
        return
      }
      if (filter(id)) {
        return `export default ${JSON.stringify(fileToUrl(id, config))}`
      }
    },
  }
}

function fileToUrl(id: string, config: ResolvedConfig) {
  return config.base + id.slice(1)
}