diff --git a/package.json b/package.json index a424dd1..4e0d887 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "dev": "node server.js", "build": "pnpm run build:client && pnpm run build:server", "build:client": "vite build --outDir dist/client --ssrManifest", - "build:server": "vite build --outDir dist/server --ssr src/worker.js" + "build:server": "vite build --outDir dist/server --ssr server-production.js" }, "dependencies": { "@duannx/vue-client-only": "^1.0.3", diff --git a/server-production.js b/server-production.js new file mode 100644 index 0000000..7a7319d --- /dev/null +++ b/server-production.js @@ -0,0 +1,36 @@ +import path from 'node:path'; +import {render} from '@/entry-server.js'; +import template from './dist/client/index.html?raw'; +import manifest from './dist/client/.vite/ssr-manifest.json?raw'; +import express from 'express'; + +const app = express(); + +const assets = express.static(path.join('./../client')); +app.use('/', async (req, res, next) => { + if (req.url.endsWith('/')) { + return next(); + } + return assets(req, res, next); +}); + +app.get('*', async (req, res) => { + try { + const renderRes = await render(req.originalUrl, manifest, { + cookies: req.headers.cookie, + }); + res.status(200).send( + template + .replace(``, renderRes.html) + .replace(``, renderRes.preloadLinks) + .replace(``, renderRes.headTags) + .replace(`null;//''`, renderRes.state), + ); + } catch (e) { + res.status(500).send(e.stack); + } +}); + +app.listen(3000, () => { + console.log('http://localhost:3000'); +}) diff --git a/src/worker.js b/src/worker.js deleted file mode 100644 index 153732e..0000000 --- a/src/worker.js +++ /dev/null @@ -1,37 +0,0 @@ -import {render} from '@/entry-server'; -import template from '@/../dist/client/index.html?raw'; -import manifest from '@/../dist/client/.vite/ssr-manifest.json?raw'; -import express from "express"; - -const app = express(); - -app.listen(3000, () => { - console.log('http://localhost:3000'); -}) - - -export default { - async fetch(request) { - try { - const url = request.originalUrl || request.url; - const renderRes = await render(url, manifest, { - cookies: request.headers.get('cookie'), - }); - return new Response( - template - .replace(``, renderRes.html) - .replace(``, renderRes.preloadLinks) - .replace(``, renderRes.headTags) - .replace(`null;//''`, renderRes.state), - { - status: 200, - headers: { - 'Content-Type': 'text/html', - }, - }, - ); - } catch (e) { - return new Response(e.stack, {status: 500}); - } - }, -} diff --git a/vite.config.js b/vite.config.js index d75a688..e8aa4a1 100644 --- a/vite.config.js +++ b/vite.config.js @@ -84,7 +84,7 @@ export default defineConfig({ VitePWA({ registerType: 'autoUpdate', workbox: { - globPatterns: ['**/*.{js,css,html,ico,png,svg}'], + globPatterns: ['**/*.{js,css,ico,png,svg,ttf,woff,woff2,json,webp}'], navigateFallbackDenylist: [ /^\/api/, /^\/cdn-cgi/, @@ -139,4 +139,8 @@ export default defineConfig({ define: { __APP_VERSION: `${new Date().getFullYear()}${new Date().getMonth()}${new Date().getDate()}.${new Date().getHours()}`, }, + ssr: { + external: true, + noExternal: ['primevue'], + }, });