MCPcopy
hub / github.com/vitejs/vite / createServer

Function createServer

playground/ssr-noexternal/server.js:7–75  ·  view source on GitHub ↗
(
  root = process.cwd(),
  isProd = process.env.NODE_ENV === 'production',
  hmrPort,
)

Source from the content-addressed store, hash-verified

5const isTest = process.env.VITEST
6
7export async function createServer(
8 root = process.cwd(),
9 isProd = process.env.NODE_ENV === 'production',
10 hmrPort,
11) {
12 const resolve = (p) => path.resolve(import.meta.dirname, p)
13
14 const indexProd = isProd
15 ? fs.readFileSync(resolve('index.html'), 'utf-8')
16 : ''
17
18 const app = express()
19
20 /**
21 * @type {import('vite').ViteDevServer}
22 */
23 let vite
24 if (!isProd) {
25 vite = await (
26 await import('vite')
27 ).createServer({
28 root,
29 logLevel: isTest ? 'error' : 'info',
30 server: {
31 middlewareMode: true,
32 watch: {
33 // During tests we edit the files too fast and sometimes chokidar
34 // misses change events, so enforce polling for consistency
35 usePolling: true,
36 interval: 100,
37 },
38 hmr: {
39 port: hmrPort,
40 },
41 },
42 appType: 'custom',
43 })
44 app.use(vite.middlewares)
45 }
46
47 app.use('*all', async (req, res) => {
48 try {
49 const url = req.originalUrl
50
51 let template, render
52 if (!isProd) {
53 // always read fresh template in dev
54 template = fs.readFileSync(resolve('index.html'), 'utf-8')
55 template = await vite.transformIndexHtml(url, template)
56 render = (await vite.ssrLoadModule('/src/entry-server.js')).render
57 } else {
58 template = indexProd
59 render = (await import('./dist/entry-server.js')).render
60 }
61
62 const appHtml = await render(url)
63
64 const html = template.replace(`<!--app-html-->`, appHtml)

Callers 2

server.jsFile · 0.70
serveFunction · 0.50

Calls 8

useMethod · 0.80
transformIndexHtmlMethod · 0.80
ssrLoadModuleMethod · 0.80
ssrFixStacktraceMethod · 0.80
logMethod · 0.80
resolveFunction · 0.70
renderFunction · 0.50
setMethod · 0.45

Tested by 1

serveFunction · 0.40