diff --git a/packages/vite-plugins/lib/favicon.js b/packages/vite-plugins/lib/favicon.js index f3fd662d9..ee6ce515b 100644 --- a/packages/vite-plugins/lib/favicon.js +++ b/packages/vite-plugins/lib/favicon.js @@ -3,23 +3,37 @@ const { resolve } = require('path') const fs = require('fs') /** + * @param {boolean} isDevelopment * @returns {import('vite').Plugin} */ -const faviconPlugin = () => ({ - name: 'vite-plugin-locales', - generateBundle() { - const favicon = fs.existsSync( - resolve(__dirname, '../../../public/favicon/favicon.ico'), - ) - ? resolve(__dirname, '../../../public/favicon/favicon.ico') - : resolve(__dirname, '../../../public/favicon/fallback.ico') - this.emitFile({ - type: 'asset', - fileName: 'favicon.ico', - source: fs.readFileSync(favicon), - }) - }, -}) +const faviconPlugin = (isDevelopment) => { + const favicon = fs.existsSync( + resolve(__dirname, '../../../public/favicon/favicon.ico'), + ) + ? resolve(__dirname, '../../../public/favicon/favicon.ico') + : resolve(__dirname, '../../../public/favicon/fallback.ico') + return { + name: 'vite-plugin-locales', + generateBundle() { + if (isDevelopment) return + this.emitFile({ + type: 'asset', + fileName: 'favicon.ico', + source: fs.readFileSync(favicon), + }) + }, + configureServer(server) { + server.middlewares.use((req, res, next) => { + if (req.url === '/favicon.ico') { + res.writeHead(200, { 'Content-Type': 'image/x-icon' }) + res.end(fs.readFileSync(favicon)) + return + } + next() + }) + }, + } +} module.exports = { faviconPlugin, diff --git a/vite.config.js b/vite.config.js index 0bde343f2..bba132b8f 100644 --- a/vite.config.js +++ b/vite.config.js @@ -91,7 +91,7 @@ const viteConfig = defineConfig(({ mode }) => { ] : []), localePlugin(isDevelopment), - faviconPlugin(), + faviconPlugin(isDevelopment), muteWarningsPlugin([ ['SOURCEMAP_ERROR', "Can't resolve original location of error"], ]),