Skip to content

Commit 1f7c4bf

Browse files
committed
feat: support config file and export a server
1 parent b019adb commit 1f7c4bf

File tree

10 files changed

+37
-25
lines changed

10 files changed

+37
-25
lines changed

build.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ export default defineBuildConfig({
44
entries: [
55
{ input: 'src/index', name: 'index' },
66
{ input: 'src/node/cli', name: 'node/cli' },
7-
{ input: 'src/server/express', name: 'express' },
7+
{ input: 'src/server/index', name: 'server' },
88
],
99
clean: true,
1010
declaration: true,

package.json

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@
1818
"import": "./dist/index.mjs",
1919
"types": "./dist/index.d.ts"
2020
},
21-
"./express": {
22-
"require": "./dist/express.cjs",
23-
"import": "./dist/express.mjs",
24-
"types": "./dist/express.d.ts"
21+
"./server": {
22+
"require": "./dist/server.cjs",
23+
"import": "./dist/server.mjs",
24+
"types": "./dist/server.d.ts"
2525
}
2626
},
2727
"files": [
@@ -33,17 +33,27 @@
3333
"vite-ssr": "./bin/vite-ssr.js"
3434
},
3535
"sideEffects": false,
36+
"typesVersions": {
37+
"*": {
38+
"server": [
39+
"dist/server.d.ts"
40+
]
41+
}
42+
},
3643
"scripts": {
3744
"dev": "tsup --watch src --onSuccess",
3845
"build": "unbuild",
3946
"basic:dev": "pnpm dev \"pnpm -F basic dev\"",
4047
"basic:build": "pnpm build & pnpm -F basic build",
4148
"basic:serve": "pnpm basic:build & pnpm -F basic serve",
42-
"basic:preview": "pnpm basic:build & pnpm -F basic preview",
49+
"basic:serve:bin": "pnpm basic:build & pnpm -F basic serve:bin",
50+
"basic:build:noexternal": "pnpm build & pnpm -F basic build:noexternal",
51+
"basic:preview": "pnpm basic:build:noexternal & pnpm -F basic preview",
4352
"vl-naive:dev": "pnpm dev \"pnpm -F vitesse-lite-naive-ui dev\"",
4453
"vl-naive:build": "pnpm build & pnpm -F vitesse-lite-naive-ui build",
4554
"vl-naive:serve": "pnpm vl-naive:build & pnpm -F vitesse-lite-naive-ui serve",
46-
"vl-naive:preview": "pnpm vl-naive:build & pnpm -F vitesse-lite-naive-ui preview",
55+
"vl-naive:build:noexternal": "pnpm build & pnpm -F vitesse-lite-naive-ui build:noexternal",
56+
"vl-naive:preview": "pnpm vl-naive:build:noexternal & pnpm -F vitesse-lite-naive-ui preview",
4757
"lint": "eslint .",
4858
"lint:fix": "eslint --fix .",
4959
"prepublishOnly": "npm run build",

src/config.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import path, { join as _join, resolve as _resolve } from 'path'
22
import { resolveConfig } from 'vite'
3-
import type { ResolvedConfig } from 'vite'
3+
import type { InlineConfig, ResolvedConfig } from 'vite'
44
import fs from 'fs-extra'
55

66
import type { ViteSSROptions } from './types'
@@ -67,6 +67,6 @@ export async function getEntryPoint(
6767
}
6868

6969
// Get all vite configurations
70-
export function resolveViteConfig(mode?: string) {
71-
return resolveConfig({}, 'build', mode || process.env.MODE || process.env.NODE_ENV)
70+
export function resolveViteConfig(mode?: string, config: InlineConfig = {}) {
71+
return resolveConfig(config, 'build', mode || process.env.MODE || process.env.NODE_ENV)
7272
}

src/entry.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ export function ViteSSR(
3737
initialState: {},
3838
transformState,
3939
routePath,
40-
render: undefined,
4140
onBeforePageRender: undefined,
4241
onPageRender: undefined,
4342
}
@@ -72,7 +71,6 @@ export function ViteSSR(
7271

7372
await router.isReady()
7473
context.initialState = router.currentRoute.value.meta.state as Record<string, any> || {}
75-
// context.render = createRender(app, context) as any
7674
}
7775

7876
const initialState = context.initialState

src/node/build.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,29 @@
11
/* eslint-disable no-console */
22
import { isAbsolute, join } from 'path'
33
import type { ResolvedConfig, UserConfig } from 'vite'
4-
import { build as viteBuild } from 'vite'
4+
import { mergeConfig, build as viteBuild } from 'vite'
55
import { getEntryPoint, resolveViteConfig } from '../config'
66
import { buildLog } from './utils'
77

88
export interface CliOptions {
99
mode?: string
1010
format?: string
11+
config?: string
1112
}
1213

1314
export async function build(cliOptions: CliOptions = {}) {
1415
const mode = process.env.MODE || process.env.NODE_ENV || cliOptions.mode || 'production'
15-
const config: ResolvedConfig = await resolveViteConfig(mode)
16+
const config: ResolvedConfig = await resolveViteConfig(mode, { configFile: cliOptions.config })
1617

1718
const cwd = process.cwd()
1819
const root = config.root || cwd
1920
const outDir = config.build.outDir || 'dist'
2021
const out = isAbsolute(outDir) ? outDir : join(root, outDir)
2122

22-
const { input } = Object.assign({}, config.ssrOptions || {}, cliOptions)
23+
const { input, clientConfig = {}, serverConfig = {} } = Object.assign({}, config.ssrOptions || {}, cliOptions)
2324

2425
buildLog('Build for client...')
25-
await viteBuild({
26+
await viteBuild(mergeConfig({
2627
build: {
2728
ssrManifest: true,
2829
outDir: join(out, 'client'),
@@ -33,10 +34,10 @@ export async function build(cliOptions: CliOptions = {}) {
3334
},
3435
},
3536
mode: config.mode,
36-
} as UserConfig)
37+
}, clientConfig) as UserConfig)
3738

3839
buildLog('Build for server...')
39-
await viteBuild({
40+
await viteBuild(mergeConfig({
4041
build: {
4142
ssr: await getEntryPoint(config.ssrOptions || {}, config),
4243
outDir: join(out, 'server'),
@@ -50,5 +51,5 @@ export async function build(cliOptions: CliOptions = {}) {
5051
},
5152
},
5253
mode: config.mode,
53-
} as UserConfig)
54+
}, serverConfig) as UserConfig)
5455
}

src/node/render.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ export async function createRender({
9898
return render
9999
}
100100

101-
export async function renderPreloadLinks(modules: any, manifest: any) {
101+
async function renderPreloadLinks(modules: any, manifest: any) {
102102
let links = ''
103103
const seen = new Set()
104104
const { basename } = await import('path')

src/server/express.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
/* eslint-disable @typescript-eslint/no-var-requires, no-console */
21
import path from 'path'
2+
import { performance } from 'perf_hooks'
33
import express from 'express'
44
import type { CreateServerOptions, ViteSSRContext } from '../types'
55
import { createRender } from '../node/render'
66
import { createStartServer } from './common'
7-
const { performance } = require('perf_hooks')
87

98
export async function createServer({
109
createApp,

src/server/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export { createRender } from '../node/render'
2+
export { createServer as createExpressServer, startServer as startExpressServer } from './express'

src/types.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
/* eslint-disable no-use-before-define */
2-
import type { ViteDevServer } from 'vite'
2+
import type { UserConfigExport, ViteDevServer } from 'vite'
33
import type { App } from 'vue'
44
import type { RouteRecordRaw, Router, RouterOptions as VueRouterOptions } from 'vue-router'
55

66
type PartialKeys<T, Keys extends keyof T> = Omit<T, Keys> & Partial<Pick<T, Keys>>
7+
type OmitExcludeKey<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>
78

89
export interface ViteSSROptions {
910
/**
@@ -37,6 +38,8 @@ export interface ViteSSROptions {
3738
* @see https://cn.vitejs.dev/config/#mode
3839
*/
3940
mode?: 'development' | 'production'
41+
clientConfig?: UserConfigExport
42+
serverConfig?: UserConfigExport
4043
}
4144

4245
interface RenderHtml {
@@ -64,7 +67,6 @@ export interface ViteSSRContext<HasRouter extends boolean = true> {
6467
* `undefined` on client side.
6568
*/
6669
routePath?: string
67-
render?: (url: string, manifest: any) => Promise<{ appHtml: string; preloadLinks: string }>
6870
}
6971

7072
export type RouterOptions = PartialKeys<VueRouterOptions, 'history'> & { base?: string }

tsup.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import type { Options } from 'tsup'
33
export default <Options><unknown>{
44
entryPoints: {
55
'index': 'src/index.ts',
6-
'express': 'src/server/express.ts',
6+
'server': 'src/server/index.ts',
77
'node/cli': 'src/node/cli.ts',
88
},
99
dts: true,

0 commit comments

Comments
 (0)