-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvite.config.ts
117 lines (111 loc) · 2.43 KB
/
vite.config.ts
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
import { defineConfig } from "vite"
import { resolve as r } from "node:path"
import vue from "@vitejs/plugin-vue"
import { defineManifest } from "./scripts/manifest"
import pkg from "./package.json"
const __dirname = process.cwd()
const manifest = defineManifest(
({ getChunk, createChunkEntry, createChunk }) => ({
manifest_version: 3,
minimum_chrome_version: "96",
name: pkg.displayName,
version: pkg.version,
description: pkg.description,
action: {
default_icon: "./assets/icon-512.png",
default_popup: createChunk({
fileName: "assets/popup.html",
name: "popup-html",
code: htmlTemplate(
getChunk("global.css").fileName,
getChunk("popup").fileName
)
}).fileName
},
options_page: createChunk({
fileName: "assets/option-ui.html",
name: "option-ui-html",
code: htmlTemplate(
getChunk("global.css").fileName,
getChunk("option-ui").fileName
)
}).fileName,
icons: {
16: "./assets/icon-512.png",
48: "./assets/icon-512.png",
128: "./assets/icon-512.png"
},
background: {
service_worker: getChunk("service-worker").fileName,
type: "module"
},
permissions: ["tabs", "storage", "activeTab"],
host_permissions: ["*://*/*"],
content_scripts: [
{
matches: ["<all_urls>"],
js: [
createChunkEntry("content-script", {
name: "content",
fileName: "content.js"
}).fileName
]
}
],
web_accessible_resources: [
{
matches: ["*://*/*"],
resources: [
getChunk("global.css").fileName,
getChunk("content-script", { isEntry: true }).fileName,
"assets/chunks/*.js",
"assets/*.png",
"assets/*.ttf"
]
}
]
})
)
// https://vitejs.dev/config/
export default defineConfig({
resolve: {
alias: {
"@": r(__dirname, "src"),
"assets": r(__dirname, "assets")
}
},
plugins: [
vue(),
manifest({
inputs: [
"src/popup.ts",
"src/content-script.ts",
"src/service-worker.ts",
"src/option-ui.ts",
"assets/css/global.css"
]
})
],
build: {
outDir: "build",
rollupOptions: {
output: {
entryFileNames: "assets/[name].js",
chunkFileNames: "assets/chunks/[hash].js",
assetFileNames: "assets/[name][extname]"
}
}
}
})
function htmlTemplate(css: string, js: string) {
return `<html>
<head>
<title>${pkg.displayName}</title>
<link rel="stylesheet" href="/${css}">
</head>
<body>
<div id="app"></div>
<script src="/${js}" type="module"></script>
</body>
</html>`
}