import * as fs from 'node:fs';
import path from 'node:path';

import normallize from 'normalize-path';
import type { PluginOption } from 'vite';
import { defaultPagesRE } from './app-provider'

export default function insertLoading() {
  const template = fs.readFileSync(normalizePagePathFromBase('./src/layout/AppProvider.vue'), 'utf-8');
  return <PluginOption>{
    name: 'insert-loading',
    transform(code, id) {
      id = normalizePagePathFromBase(id);
      const regResult = defaultPagesRE.exec(id);
      if (regResult) {
        const oldTemplate = /<template>([\s\S]*)<\/template>/.exec(code);
        const tempString = oldTemplate != null ? oldTemplate[1] : '';
        const newTemplate = template.replace('<!-- template -->', tempString as string);
        code = code.replace(/<template>([\s\S]*)<\/template>/, newTemplate);
      }
      return code;
    },
  };
  function normalizePagePathFromBase(file: string) {
    return normallize(path.relative(process.cwd(), file));
  }
}

<template>
  <view>
    <LoadingPage></LoadingPage>
    <!-- template -->
  </view>
</template>

注意追加的插件在uni之前

plugins: [
    AutoImportTypes(),
    PiniaAutoRefs(),
    AutoImport({
      dts: 'src/auto-imports.d.ts',
      imports: [
        'vue',
        'uni-app',
        'pinia',
        {
          '@/helper/pinia-auto-refs': ['useStore'],
        },
      ],
      exclude: ['createApp'],
      eslintrc: {
        enabled: true,
      },
    }),
    Components({
      extensions: ['vue'],
      dts: 'src/components.d.ts',
    }),
    // 上面写的插件
    insertLoading(),
    // uni支持(兼容性写法,当type为module时,必须要这样写)
    (uniPlugin as any).default(),
    Unocss(),
  ],
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐