wangzhibo
6 天以前 da0230346106bc810664488a2b152bc24f853a44
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import type { Plugin } from "vite";
import { glob } from "glob";
import path from "path";
import { readFileSync } from "fs";
import { rootDir } from "./utils";
 
export function demo(enable?: boolean): Plugin {
    const virtualModuleIds = ["virtual:demo"];
 
    return {
        name: "vite-cool-demo",
        enforce: "pre",
        resolveId(id) {
            if (virtualModuleIds.includes(id)) {
                return "\0" + id;
            }
        },
        async load(id) {
            if (id === "\0virtual:demo") {
                const demo: any = {};
 
                if (enable) {
                    const files = await glob(
                        rootDir("./src/modules/demo/views/crud/components") + "/**",
                        {
                            stat: true,
                            withFileTypes: true,
                        },
                    );
 
                    for (const file of files) {
                        if (file.isFile()) {
                            const p = path.join(file.path, file.name);
 
                            demo[
                                p
                                    .replace(/\\/g, "/")
                                    .split("src/modules/demo/views/crud/components/")[1]
                            ] = readFileSync(p, "utf-8");
                        }
                    }
                }
 
                return `
                    export const demo = ${JSON.stringify(demo)};
                `;
            }
        },
    };
}