From 3c719118a776506b5937b3652e6f072e73d6df57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8D=89=E9=9E=8B=E6=B2=A1=E5=8F=B7?= <308487730@qq.com> Date: Sat, 6 Aug 2022 11:40:46 +0800 Subject: [PATCH] fix(Vite@.3x): Invalid URL #52 --- vite.config.ts | 76 ++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 70 insertions(+), 6 deletions(-) diff --git a/vite.config.ts b/vite.config.ts index 66f9439..3ea4c87 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,18 +1,22 @@ import { rmSync } from 'fs' -import { join } from 'path' -import { defineConfig, UserConfig, Plugin } from 'vite' +import path from 'path' +import { + type Plugin, + type UserConfig, + defineConfig, +} from 'vite' import react from '@vitejs/plugin-react' import electron from 'vite-plugin-electron' import pkg from './package.json' -rmSync(join(__dirname, 'dist'), { recursive: true, force: true }) // v14.14.0 +rmSync(path.join(__dirname, 'dist'), { recursive: true, force: true }) // v14.14.0 // https://vitejs.dev/config/ export default defineConfig({ resolve: { alias: { - '@': join(__dirname, 'src'), - 'styles': join(__dirname, 'src/assets/styles'), + '@': path.join(__dirname, 'src'), + 'styles': path.join(__dirname, 'src/assets/styles'), }, }, plugins: [ @@ -29,7 +33,7 @@ export default defineConfig({ preload: { input: { // You can configure multiple preload scripts here - index: join(__dirname, 'electron/preload/index.ts'), + index: path.join(__dirname, 'electron/preload/index.ts'), }, vite: { build: { @@ -42,11 +46,15 @@ export default defineConfig({ // Enables use of Node.js API in the Electron-Renderer renderer: {}, }), + renderBuiltUrl(), ], server: { host: pkg.env.VITE_DEV_SERVER_HOST, port: pkg.env.VITE_DEV_SERVER_PORT, }, + build: { + minify: false + } }) function withDebug(config: UserConfig): UserConfig { @@ -63,3 +71,59 @@ function withDebug(config: UserConfig): UserConfig { } return config } + +// Only worked Vite@3.x #52 +function renderBuiltUrl(): Plugin { + // https://github.com/vitejs/vite/blob/main/packages/vite/src/node/constants.ts#L84-L124 + const KNOWN_ASSET_TYPES = [ + // images + 'png', + 'jpe?g', + 'jfif', + 'pjpeg', + 'pjp', + 'gif', + 'svg', + 'ico', + 'webp', + 'avif', + + // media + 'mp4', + 'webm', + 'ogg', + 'mp3', + 'wav', + 'flac', + 'aac', + + // fonts + 'woff2?', + 'eot', + 'ttf', + 'otf', + + // other + 'webmanifest', + 'pdf', + 'txt' + ] + + return { + name: 'render-built-url', + config(config) { + config.experimental = { + renderBuiltUrl(filename, type) { + if ( + KNOWN_ASSET_TYPES.includes(path.extname(filename).slice(1)) && + type.hostType === 'js' + ) { + // Avoid Vite relative-path assets handling + // https://github.com/vitejs/vite/blob/89dd31cfe228caee358f4032b31fdf943599c842/packages/vite/src/node/build.ts#L838-L875 + return { runtime: JSON.stringify(filename) } + } + }, + } + }, + } +}