Files
2024-11-04 15:00:40 +08:00

182 lines
5.0 KiB
TypeScript

import path from "node:path"
import jsx from "@vitejs/plugin-vue-jsx"
import vue from "@vitejs/plugin-vue"
import unocss from "unocss/vite"
import { createSprite2CssPlugin } from "@curev/vite-plugin-sprite"
import uncomponents from "unplugin-vue-components/vite"
import { defineConfig } from "vite"
import fs from "fs-extra"
import viteCompression from "vite-plugin-compression"
import { presetUno } from "unocss"
import pkg from "../../package.json"
// vite build ./packages/renderer --base /dcalc/
// const env = import.meta.env
// console.log(env)
const characterPath = path.resolve(__dirname, "./imagesrc/characters")
const files = fs.readdirSync(characterPath)
// const specificityPath = path.resolve(__dirname, "./imagesrc/specificity")
// const files_specificity = fs.readdirSync(specificityPath)
const especificityPath = path.resolve(__dirname, "./imagesrc/especificity")
const files_especificity = fs.readdirSync(especificityPath)
// https://vitejs.dev/config/
export default defineConfig(({ command, mode, ssrBuild }) => {
const temp = [
{
source: path.resolve(__dirname, "./imagesrc/adventure/jobs"),
className: "classchange-icon-[name]",
excludes: [],
name: "jobs"
},
{
source: path.resolve(__dirname, "./imagesrc/adventure/sub"),
className: "character-icon-[name]",
excludes: [],
name: "sub"
},
{
source: path.resolve(__dirname, "./imagesrc/common"),
className: "common-icon-[name]",
excludes: ["head-2.png"],
name: "common"
},
{
source: path.resolve(__dirname, "./imagesrc/equipment"),
className: "equipment-icon-[dirname]-[name]",
excludes: ["wisdom", "equipmyth"],
name: "equipment"
},
{
source: path.resolve(__dirname, "./imagesrc/asrahan"),
className: "asrahan-icon-[name]",
name: "asrahan"
},
// ...files_specificity.map(file => {
// const filePath = path.join(specificityPath, file)
// return {
// source: path.resolve(filePath),
// className: (entry: any) => {
// return `specificity-icon-${file}-${entry.name.replace(/[().·,:]+/g, "")}`
// },
// name: file
// }
// }),
...files_especificity.map(file => {
const filePath = path.join(especificityPath, file)
return {
source: path.resolve(filePath),
className: (entry: any) => {
return `especificity-icon-${file}-${entry.name.replace(/[().·,:]+/g, "")}`
},
name: file
}
}),
...files.map(file => {
const filePath = path.join(characterPath, file)
return {
source: path.resolve(filePath),
className: (entry: any) => {
return `character-icon-${file}-${entry.name.replace(/[().·,:]+/g, "")}`
},
excludes: ["bg.jpg","material"],
name: file
}
})
]
return {
mode: process.env.NODE_ENV,
root: __dirname,
resolve: {
alias: {
"@": path.resolve(__dirname, "./src")
}
},
define: {
APP_VERSION: `"${pkg.version}"`
},
plugins: [
unocss({
rules: [
[
/^col-(\d?\d)$/,
([, o]) => {
const span = Number(o)
const val = `${(span * 100) / 24}%`
return {
flex: `0 0 ${val}`
}
}
]
],
presets: [presetUno()]
}),
uncomponents({
dts: true,
dirs: ["src/components/"],
allowOverrides: true,
directoryAsNamespace: true
}),
jsx(),
vue(),
createSprite2CssPlugin({
entries: temp,
hmr: true,
target: "/images"
}),
viteCompression({
// threshold: 1024 * 500 // 对大于 1mb 的文件进行压缩
// verbose: true
verbose: true,
disable: false,
threshold: 10240,
algorithm: "gzip",
ext: ".gz"
})
],
optimizeDeps: {
exclude: ["electron"]
},
build: {
/* from mode option */
sourcemap: process.env.NODE_ENV == "development",
outDir: "../../dist/app/renderer",
assetsDir: "assets",
terserOptions: {
compress: {
drop_console: true,
drop_debugger: true
}
},
// rollupOptions: {
// output: {
// // 重点在这里哦
// // entryFileNames: `assets/[name].${timestamp}.js`,
// // chunkFileNames: `assets/[name].${timestamp}.js`,
// // assetFileNames: `assets/[name].${timestamp}.[ext]`
// // entryFileNames: `assets/[name].js`,
// // chunkFileNames: `assets/[name].js`,
// assetFileNames: `assets/[name].[ext]`
// }
// }
assetsInlineLimit: 1024 * 30 // 图片转 base64 编码的阈值
},
server: {
host: pkg.env.VITE_DEV_SERVER_HOST,
port: pkg.env.VITE_DEV_SERVER_PORT
},
preview: {
port: pkg.env.VITE_DEV_SERVER_PORT,
host: pkg.env.VITE_DEV_SERVER_HOST
}
}
})