Skip to content

Commit faacb51

Browse files
authored
feat: default esm SSR build, simplified externalization (#8348)
1 parent 1712d80 commit faacb51

File tree

6 files changed

+32
-28
lines changed

6 files changed

+32
-28
lines changed

Diff for: playground/ssr-vue/__tests__/serve.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export async function serve(): Promise<{ close(): Promise<void> }> {
3838

3939
await kill(port)
4040

41-
const { createServer } = require(path.resolve(rootDir, 'server.js'))
41+
const { createServer } = await import(path.resolve(rootDir, 'server.js'))
4242
const { app, vite } = await createServer(
4343
rootDir,
4444
isBuild,

Diff for: playground/ssr-vue/__tests__/ssr-vue.spec.ts

+8-4
Original file line numberDiff line numberDiff line change
@@ -186,10 +186,14 @@ test.runIf(isBuild)('dynamic css file should be preloaded', async () => {
186186
const re =
187187
/link rel="modulepreload".*?href="\/test\/assets\/(Home\.\w{8}\.js)"/
188188
const filename = re.exec(homeHtml)[1]
189-
const manifest = require(resolve(
190-
process.cwd(),
191-
'./playground-temp/ssr-vue/dist/client/ssr-manifest.json'
192-
))
189+
const manifest = (
190+
await import(
191+
resolve(
192+
process.cwd(),
193+
'./playground-temp/ssr-vue/dist/client/ssr-manifest.json'
194+
)
195+
)
196+
).default
193197
const depFile = manifest[filename]
194198
for (const file of depFile) {
195199
expect(homeHtml).toMatch(file)

Diff for: playground/ssr-vue/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"name": "test-ssr-vue",
33
"private": true,
44
"version": "0.0.0",
5+
"type": "module",
56
"scripts": {
67
"dev": "node server",
78
"build": "npm run build:client && npm run build:server",

Diff for: playground/ssr-vue/prerender.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
// Pre-render the app into static HTML.
22
// run `npm run generate` and then `dist/static` can be served as a static site.
33

4-
const fs = require('fs')
5-
const path = require('path')
4+
import fs from 'fs'
5+
import path from 'path'
66

77
const toAbsolute = (p) => path.resolve(__dirname, p)
88

9-
const manifest = require('./dist/static/ssr-manifest.json')
9+
const manifest = (await import('./dist/static/ssr-manifest.json')).default
1010
const template = fs.readFileSync(toAbsolute('dist/static/index.html'), 'utf-8')
11-
const { render } = require('./dist/server/entry-server.js')
11+
const { render } = await import('./dist/server/entry-server.js')
1212

1313
// determine routes to pre-render from src/pages
1414
const routesToPrerender = fs

Diff for: playground/ssr-vue/server.js

+13-12
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
// @ts-check
2-
const fs = require('fs')
3-
const path = require('path')
4-
const express = require('express')
2+
import fs from 'fs'
3+
import path from 'path'
4+
import { fileURLToPath } from 'url'
5+
import express from 'express'
56

67
const isTest = process.env.NODE_ENV === 'test' || !!process.env.VITE_TEST_BUILD
78

8-
async function createServer(
9+
export async function createServer(
910
root = process.cwd(),
1011
isProd = process.env.NODE_ENV === 'production',
1112
hmrPort
1213
) {
14+
const __dirname = path.dirname(fileURLToPath(import.meta.url))
1315
const resolve = (p) => path.resolve(__dirname, p)
1416

1517
const indexProd = isProd
@@ -18,7 +20,7 @@ async function createServer(
1820

1921
const manifest = isProd
2022
? // @ts-ignore
21-
require('./dist/client/ssr-manifest.json')
23+
(await import('./dist/client/ssr-manifest.json')).default
2224
: {}
2325

2426
const app = express()
@@ -28,7 +30,9 @@ async function createServer(
2830
*/
2931
let vite
3032
if (!isProd) {
31-
vite = await require('vite').createServer({
33+
vite = await (
34+
await import('vite')
35+
).createServer({
3236
base: '/test/',
3337
root,
3438
logLevel: isTest ? 'error' : 'info',
@@ -48,10 +52,10 @@ async function createServer(
4852
// use vite's connect instance as middleware
4953
app.use(vite.middlewares)
5054
} else {
51-
app.use(require('compression')())
55+
app.use((await import('compression')).default())
5256
app.use(
5357
'/test/',
54-
require('serve-static')(resolve('dist/client'), {
58+
(await import('serve-static')).default(resolve('dist/client'), {
5559
index: false
5660
})
5761
)
@@ -70,7 +74,7 @@ async function createServer(
7074
} else {
7175
template = indexProd
7276
// @ts-ignore
73-
render = require('./dist/server/entry-server.js').render
77+
render = (await import('./dist/server/entry-server.js')).render
7478
}
7579

7680
const [appHtml, preloadLinks] = await render(url, manifest)
@@ -97,6 +101,3 @@ if (!isTest) {
97101
})
98102
)
99103
}
100-
101-
// for test use
102-
exports.createServer = createServer

Diff for: playground/ssr-vue/vite.config.js

+5-7
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
1-
const vuePlugin = require('@vitejs/plugin-vue')
2-
const vueJsx = require('@vitejs/plugin-vue-jsx')
1+
import { defineConfig } from 'vite'
2+
import vuePlugin from '@vitejs/plugin-vue'
3+
import vueJsx from '@vitejs/plugin-vue-jsx'
34
const virtualFile = '@virtual-file'
45
const virtualId = '\0' + virtualFile
56
const nestedVirtualFile = '@nested-virtual-file'
67
const nestedVirtualId = '\0' + nestedVirtualFile
78

8-
/**
9-
* @type {import('vite').UserConfig}
10-
*/
11-
module.exports = {
9+
export default defineConfig({
1210
base: '/test/',
1311
plugins: [
1412
vuePlugin(),
@@ -56,4 +54,4 @@ module.exports = {
5654
optimizeDeps: {
5755
exclude: ['example-external-component']
5856
}
59-
}
57+
})

0 commit comments

Comments
 (0)