vite 2.6.0-beta.0 → 2.6.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of vite might be problematic. Click here for more details.
- package/CHANGELOG.md +66 -0
- package/LICENSE.md +161 -3011
- package/bin/vite.js +2 -1
- package/dist/node/chunks/{dep-91aa74e8.js → dep-1e0a75a8.js} +58 -32
- package/dist/node/chunks/dep-1e0a75a8.js.map +1 -0
- package/dist/node/chunks/{dep-e36486f6.js → dep-ac1b4bf9.js} +1 -1
- package/dist/node/chunks/dep-ac1b4bf9.js.map +1 -0
- package/dist/node/chunks/{dep-c7e510f9.js → dep-ba6b30a0.js} +27538 -4953
- package/dist/node/chunks/dep-ba6b30a0.js.map +1 -0
- package/dist/node/chunks/{dep-11213a75.js → dep-c4cf6e92.js} +19 -6
- package/dist/node/chunks/dep-c4cf6e92.js.map +1 -0
- package/dist/node/chunks/{dep-eb6ef720.js → dep-d574094c.js} +18 -5
- package/dist/node/chunks/dep-d574094c.js.map +1 -0
- package/dist/node/chunks/{dep-0d2f9464.js → dep-e39b05d6.js} +18 -5
- package/dist/node/chunks/dep-e39b05d6.js.map +1 -0
- package/dist/node/cli.js +60 -23992
- package/dist/node/cli.js.map +1 -1
- package/dist/node/index.d.ts +26 -8
- package/dist/node/index.js +18 -15
- package/dist/node/index.js.map +1 -1
- package/dist/node/terser.js +102 -55
- package/package.json +28 -13
- package/types/package.json +3 -0
- package/api-extractor.json +0 -54
- package/dist/node/chunks/dep-0d2f9464.js.map +0 -1
- package/dist/node/chunks/dep-11213a75.js.map +0 -1
- package/dist/node/chunks/dep-91aa74e8.js.map +0 -1
- package/dist/node/chunks/dep-c7e510f9.js.map +0 -1
- package/dist/node/chunks/dep-e36486f6.js.map +0 -1
- package/dist/node/chunks/dep-eb6ef720.js.map +0 -1
- package/dist/node/terser.js.map +0 -1
- package/rollup.config.js +0 -389
- package/scripts/patchTypes.js +0 -70
- package/src/node/__tests__/asset.spec.ts +0 -156
- package/src/node/__tests__/build.spec.ts +0 -67
- package/src/node/__tests__/config.spec.ts +0 -166
- package/src/node/__tests__/packages/name/package.json +0 -3
- package/src/node/__tests__/packages/noname/package.json +0 -1
- package/src/node/__tests__/plugins/css.spec.ts +0 -116
- package/src/node/__tests__/scan.spec.ts +0 -118
- package/src/node/__tests__/utils.spec.ts +0 -40
- package/src/node/build.ts +0 -783
- package/src/node/cli.ts +0 -239
- package/src/node/config.ts +0 -1033
- package/src/node/constants.ts +0 -87
- package/src/node/importGlob.ts +0 -173
- package/src/node/index.ts +0 -88
- package/src/node/logger.ts +0 -167
- package/src/node/optimizer/esbuildDepPlugin.ts +0 -216
- package/src/node/optimizer/index.ts +0 -410
- package/src/node/optimizer/registerMissing.ts +0 -102
- package/src/node/optimizer/scan.ts +0 -457
- package/src/node/plugin.ts +0 -138
- package/src/node/plugins/asset.ts +0 -365
- package/src/node/plugins/assetImportMetaUrl.ts +0 -99
- package/src/node/plugins/clientInjections.ts +0 -72
- package/src/node/plugins/css.ts +0 -1279
- package/src/node/plugins/dataUri.ts +0 -64
- package/src/node/plugins/define.ts +0 -107
- package/src/node/plugins/esbuild.ts +0 -280
- package/src/node/plugins/html.ts +0 -673
- package/src/node/plugins/importAnalysis.ts +0 -614
- package/src/node/plugins/importAnalysisBuild.ts +0 -334
- package/src/node/plugins/index.ts +0 -69
- package/src/node/plugins/json.ts +0 -75
- package/src/node/plugins/loadFallback.ts +0 -19
- package/src/node/plugins/manifest.ts +0 -123
- package/src/node/plugins/modulePreloadPolyfill.ts +0 -100
- package/src/node/plugins/preAlias.ts +0 -22
- package/src/node/plugins/reporter.ts +0 -244
- package/src/node/plugins/resolve.ts +0 -925
- package/src/node/plugins/terser.ts +0 -40
- package/src/node/plugins/wasm.ts +0 -72
- package/src/node/plugins/worker.ts +0 -117
- package/src/node/preview.ts +0 -82
- package/src/node/server/__tests__/fixtures/none/nested/package.json +0 -3
- package/src/node/server/__tests__/fixtures/pnpm/nested/package.json +0 -3
- package/src/node/server/__tests__/fixtures/pnpm/package.json +0 -3
- package/src/node/server/__tests__/fixtures/pnpm/pnpm-workspace.yaml +0 -0
- package/src/node/server/__tests__/fixtures/yarn/nested/package.json +0 -3
- package/src/node/server/__tests__/fixtures/yarn/package.json +0 -6
- package/src/node/server/__tests__/search-root.spec.ts +0 -31
- package/src/node/server/hmr.ts +0 -489
- package/src/node/server/http.ts +0 -198
- package/src/node/server/index.ts +0 -705
- package/src/node/server/middlewares/base.ts +0 -52
- package/src/node/server/middlewares/error.ts +0 -98
- package/src/node/server/middlewares/indexHtml.ts +0 -170
- package/src/node/server/middlewares/proxy.ts +0 -124
- package/src/node/server/middlewares/spaFallback.ts +0 -32
- package/src/node/server/middlewares/static.ts +0 -153
- package/src/node/server/middlewares/time.ts +0 -18
- package/src/node/server/middlewares/transform.ts +0 -196
- package/src/node/server/moduleGraph.ts +0 -200
- package/src/node/server/openBrowser.ts +0 -101
- package/src/node/server/pluginContainer.ts +0 -546
- package/src/node/server/searchRoot.ts +0 -70
- package/src/node/server/send.ts +0 -54
- package/src/node/server/sourcemap.ts +0 -54
- package/src/node/server/transformRequest.ts +0 -168
- package/src/node/server/ws.ts +0 -131
- package/src/node/ssr/__tests__/ssrTransform.spec.ts +0 -309
- package/src/node/ssr/ssrExternal.ts +0 -161
- package/src/node/ssr/ssrManifestPlugin.ts +0 -53
- package/src/node/ssr/ssrModuleLoader.ts +0 -214
- package/src/node/ssr/ssrStacktrace.ts +0 -75
- package/src/node/ssr/ssrTransform.ts +0 -452
- package/src/node/tsconfig.json +0 -14
- package/src/node/utils.ts +0 -565
- package/tsconfig.base.json +0 -11
package/src/node/server/index.ts
DELETED
|
@@ -1,705 +0,0 @@
|
|
|
1
|
-
import fs from 'fs'
|
|
2
|
-
import path from 'path'
|
|
3
|
-
import * as net from 'net'
|
|
4
|
-
import * as http from 'http'
|
|
5
|
-
import * as https from 'https'
|
|
6
|
-
import connect from 'connect'
|
|
7
|
-
import corsMiddleware from 'cors'
|
|
8
|
-
import chalk from 'chalk'
|
|
9
|
-
import { AddressInfo } from 'net'
|
|
10
|
-
import chokidar from 'chokidar'
|
|
11
|
-
import { resolveHttpsConfig, resolveHttpServer, httpServerStart } from './http'
|
|
12
|
-
import { resolveConfig, InlineConfig, ResolvedConfig } from '../config'
|
|
13
|
-
import { createPluginContainer, PluginContainer } from './pluginContainer'
|
|
14
|
-
import { FSWatcher, WatchOptions } from 'types/chokidar'
|
|
15
|
-
import { createWebSocketServer, WebSocketServer } from './ws'
|
|
16
|
-
import { baseMiddleware } from './middlewares/base'
|
|
17
|
-
import { proxyMiddleware, ProxyOptions } from './middlewares/proxy'
|
|
18
|
-
import { spaFallbackMiddleware } from './middlewares/spaFallback'
|
|
19
|
-
import { transformMiddleware } from './middlewares/transform'
|
|
20
|
-
import {
|
|
21
|
-
createDevHtmlTransformFn,
|
|
22
|
-
indexHtmlMiddleware
|
|
23
|
-
} from './middlewares/indexHtml'
|
|
24
|
-
import {
|
|
25
|
-
serveRawFsMiddleware,
|
|
26
|
-
servePublicMiddleware,
|
|
27
|
-
serveStaticMiddleware
|
|
28
|
-
} from './middlewares/static'
|
|
29
|
-
import { timeMiddleware } from './middlewares/time'
|
|
30
|
-
import { ModuleGraph, ModuleNode } from './moduleGraph'
|
|
31
|
-
import { Connect } from 'types/connect'
|
|
32
|
-
import { ensureLeadingSlash, normalizePath } from '../utils'
|
|
33
|
-
import { errorMiddleware, prepareError } from './middlewares/error'
|
|
34
|
-
import { handleHMRUpdate, HmrOptions, handleFileAddUnlink } from './hmr'
|
|
35
|
-
import { openBrowser } from './openBrowser'
|
|
36
|
-
import launchEditorMiddleware from 'launch-editor-middleware'
|
|
37
|
-
import { TransformResult } from 'rollup'
|
|
38
|
-
import { TransformOptions, transformRequest } from './transformRequest'
|
|
39
|
-
import {
|
|
40
|
-
transformWithEsbuild,
|
|
41
|
-
ESBuildTransformResult
|
|
42
|
-
} from '../plugins/esbuild'
|
|
43
|
-
import { TransformOptions as EsbuildTransformOptions } from 'esbuild'
|
|
44
|
-
import { DepOptimizationMetadata, optimizeDeps } from '../optimizer'
|
|
45
|
-
import { ssrLoadModule } from '../ssr/ssrModuleLoader'
|
|
46
|
-
import { resolveSSRExternal } from '../ssr/ssrExternal'
|
|
47
|
-
import {
|
|
48
|
-
rebindErrorStacktrace,
|
|
49
|
-
ssrRewriteStacktrace
|
|
50
|
-
} from '../ssr/ssrStacktrace'
|
|
51
|
-
import { createMissingImporterRegisterFn } from '../optimizer/registerMissing'
|
|
52
|
-
import { printServerUrls } from '../logger'
|
|
53
|
-
import { resolveHostname } from '../utils'
|
|
54
|
-
import { searchForWorkspaceRoot } from './searchRoot'
|
|
55
|
-
import { CLIENT_DIR } from '../constants'
|
|
56
|
-
|
|
57
|
-
export interface ServerOptions {
|
|
58
|
-
host?: string | boolean
|
|
59
|
-
port?: number
|
|
60
|
-
/**
|
|
61
|
-
* Enable TLS + HTTP/2.
|
|
62
|
-
* Note: this downgrades to TLS only when the proxy option is also used.
|
|
63
|
-
*/
|
|
64
|
-
https?: boolean | https.ServerOptions
|
|
65
|
-
/**
|
|
66
|
-
* Open browser window on startup
|
|
67
|
-
*/
|
|
68
|
-
open?: boolean | string
|
|
69
|
-
/**
|
|
70
|
-
* Force dep pre-optimization regardless of whether deps have changed.
|
|
71
|
-
*/
|
|
72
|
-
force?: boolean
|
|
73
|
-
/**
|
|
74
|
-
* Configure HMR-specific options (port, host, path & protocol)
|
|
75
|
-
*/
|
|
76
|
-
hmr?: HmrOptions | boolean
|
|
77
|
-
/**
|
|
78
|
-
* chokidar watch options
|
|
79
|
-
* https://github.com/paulmillr/chokidar#api
|
|
80
|
-
*/
|
|
81
|
-
watch?: WatchOptions
|
|
82
|
-
/**
|
|
83
|
-
* Configure custom proxy rules for the dev server. Expects an object
|
|
84
|
-
* of `{ key: options }` pairs.
|
|
85
|
-
* Uses [`http-proxy`](https://github.com/http-party/node-http-proxy).
|
|
86
|
-
* Full options [here](https://github.com/http-party/node-http-proxy#options).
|
|
87
|
-
*
|
|
88
|
-
* Example `vite.config.js`:
|
|
89
|
-
* ``` js
|
|
90
|
-
* module.exports = {
|
|
91
|
-
* proxy: {
|
|
92
|
-
* // string shorthand
|
|
93
|
-
* '/foo': 'http://localhost:4567/foo',
|
|
94
|
-
* // with options
|
|
95
|
-
* '/api': {
|
|
96
|
-
* target: 'http://jsonplaceholder.typicode.com',
|
|
97
|
-
* changeOrigin: true,
|
|
98
|
-
* rewrite: path => path.replace(/^\/api/, '')
|
|
99
|
-
* }
|
|
100
|
-
* }
|
|
101
|
-
* }
|
|
102
|
-
* ```
|
|
103
|
-
*/
|
|
104
|
-
proxy?: Record<string, string | ProxyOptions>
|
|
105
|
-
/**
|
|
106
|
-
* Configure CORS for the dev server.
|
|
107
|
-
* Uses https://github.com/expressjs/cors.
|
|
108
|
-
* Set to `true` to allow all methods from any origin, or configure separately
|
|
109
|
-
* using an object.
|
|
110
|
-
*/
|
|
111
|
-
cors?: CorsOptions | boolean
|
|
112
|
-
/**
|
|
113
|
-
* If enabled, vite will exit if specified port is already in use
|
|
114
|
-
*/
|
|
115
|
-
strictPort?: boolean
|
|
116
|
-
/**
|
|
117
|
-
* Create Vite dev server to be used as a middleware in an existing server
|
|
118
|
-
*/
|
|
119
|
-
middlewareMode?: boolean | 'html' | 'ssr'
|
|
120
|
-
/**
|
|
121
|
-
* Prepend this folder to http requests, for use when proxying vite as a subfolder
|
|
122
|
-
* Should start and end with the `/` character
|
|
123
|
-
*/
|
|
124
|
-
base?: string
|
|
125
|
-
/**
|
|
126
|
-
* Options for files served via '/\@fs/'.
|
|
127
|
-
*/
|
|
128
|
-
fs?: FileSystemServeOptions
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
export interface ResolvedServerOptions extends ServerOptions {
|
|
132
|
-
fs: Required<FileSystemServeOptions>
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
export interface FileSystemServeOptions {
|
|
136
|
-
/**
|
|
137
|
-
* Strictly restrict file accessing outside of allowing paths.
|
|
138
|
-
*
|
|
139
|
-
* Set to `false` to disable the warning
|
|
140
|
-
* Default to false at this moment, will enabled by default in the future versions.
|
|
141
|
-
*
|
|
142
|
-
* @expiremental
|
|
143
|
-
* @default undefined
|
|
144
|
-
*/
|
|
145
|
-
strict?: boolean | undefined
|
|
146
|
-
|
|
147
|
-
/**
|
|
148
|
-
* Restrict accessing files outside the allowed directories.
|
|
149
|
-
*
|
|
150
|
-
* Accepts absolute path or a path relative to project root.
|
|
151
|
-
* Will try to search up for workspace root by default.
|
|
152
|
-
*
|
|
153
|
-
* @expiremental
|
|
154
|
-
*/
|
|
155
|
-
allow?: string[]
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
* https://github.com/expressjs/cors#configuration-options
|
|
160
|
-
*/
|
|
161
|
-
export interface CorsOptions {
|
|
162
|
-
origin?:
|
|
163
|
-
| CorsOrigin
|
|
164
|
-
| ((origin: string, cb: (err: Error, origins: CorsOrigin) => void) => void)
|
|
165
|
-
methods?: string | string[]
|
|
166
|
-
allowedHeaders?: string | string[]
|
|
167
|
-
exposedHeaders?: string | string[]
|
|
168
|
-
credentials?: boolean
|
|
169
|
-
maxAge?: number
|
|
170
|
-
preflightContinue?: boolean
|
|
171
|
-
optionsSuccessStatus?: number
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
export type CorsOrigin = boolean | string | RegExp | (string | RegExp)[]
|
|
175
|
-
|
|
176
|
-
export type ServerHook = (
|
|
177
|
-
server: ViteDevServer
|
|
178
|
-
) => (() => void) | void | Promise<(() => void) | void>
|
|
179
|
-
|
|
180
|
-
export interface ViteDevServer {
|
|
181
|
-
/**
|
|
182
|
-
* The resolved vite config object
|
|
183
|
-
*/
|
|
184
|
-
config: ResolvedConfig
|
|
185
|
-
/**
|
|
186
|
-
* A connect app instance.
|
|
187
|
-
* - Can be used to attach custom middlewares to the dev server.
|
|
188
|
-
* - Can also be used as the handler function of a custom http server
|
|
189
|
-
* or as a middleware in any connect-style Node.js frameworks
|
|
190
|
-
*
|
|
191
|
-
* https://github.com/senchalabs/connect#use-middleware
|
|
192
|
-
*/
|
|
193
|
-
middlewares: Connect.Server
|
|
194
|
-
/**
|
|
195
|
-
* @deprecated use `server.middlewares` instead
|
|
196
|
-
*/
|
|
197
|
-
app: Connect.Server
|
|
198
|
-
/**
|
|
199
|
-
* native Node http server instance
|
|
200
|
-
* will be null in middleware mode
|
|
201
|
-
*/
|
|
202
|
-
httpServer: http.Server | null
|
|
203
|
-
/**
|
|
204
|
-
* chokidar watcher instance
|
|
205
|
-
* https://github.com/paulmillr/chokidar#api
|
|
206
|
-
*/
|
|
207
|
-
watcher: FSWatcher
|
|
208
|
-
/**
|
|
209
|
-
* web socket server with `send(payload)` method
|
|
210
|
-
*/
|
|
211
|
-
ws: WebSocketServer
|
|
212
|
-
/**
|
|
213
|
-
* Rollup plugin container that can run plugin hooks on a given file
|
|
214
|
-
*/
|
|
215
|
-
pluginContainer: PluginContainer
|
|
216
|
-
/**
|
|
217
|
-
* Module graph that tracks the import relationships, url to file mapping
|
|
218
|
-
* and hmr state.
|
|
219
|
-
*/
|
|
220
|
-
moduleGraph: ModuleGraph
|
|
221
|
-
/**
|
|
222
|
-
* Programmatically resolve, load and transform a URL and get the result
|
|
223
|
-
* without going through the http request pipeline.
|
|
224
|
-
*/
|
|
225
|
-
transformRequest(
|
|
226
|
-
url: string,
|
|
227
|
-
options?: TransformOptions
|
|
228
|
-
): Promise<TransformResult | null>
|
|
229
|
-
/**
|
|
230
|
-
* Apply vite built-in HTML transforms and any plugin HTML transforms.
|
|
231
|
-
*/
|
|
232
|
-
transformIndexHtml(
|
|
233
|
-
url: string,
|
|
234
|
-
html: string,
|
|
235
|
-
originalUrl?: string
|
|
236
|
-
): Promise<string>
|
|
237
|
-
/**
|
|
238
|
-
* Util for transforming a file with esbuild.
|
|
239
|
-
* Can be useful for certain plugins.
|
|
240
|
-
*
|
|
241
|
-
* @deprecated import `transformWithEsbuild` from `vite` instead
|
|
242
|
-
*/
|
|
243
|
-
transformWithEsbuild(
|
|
244
|
-
code: string,
|
|
245
|
-
filename: string,
|
|
246
|
-
options?: EsbuildTransformOptions,
|
|
247
|
-
inMap?: object
|
|
248
|
-
): Promise<ESBuildTransformResult>
|
|
249
|
-
/**
|
|
250
|
-
* Load a given URL as an instantiated module for SSR.
|
|
251
|
-
*/
|
|
252
|
-
ssrLoadModule(url: string): Promise<Record<string, any>>
|
|
253
|
-
/**
|
|
254
|
-
* Fix ssr error stacktrace
|
|
255
|
-
*/
|
|
256
|
-
ssrFixStacktrace(e: Error): void
|
|
257
|
-
/**
|
|
258
|
-
* Start the server.
|
|
259
|
-
*/
|
|
260
|
-
listen(port?: number, isRestart?: boolean): Promise<ViteDevServer>
|
|
261
|
-
/**
|
|
262
|
-
* Stop the server.
|
|
263
|
-
*/
|
|
264
|
-
close(): Promise<void>
|
|
265
|
-
/**
|
|
266
|
-
* @internal
|
|
267
|
-
*/
|
|
268
|
-
_optimizeDepsMetadata: DepOptimizationMetadata | null
|
|
269
|
-
/**
|
|
270
|
-
* Deps that are externalized
|
|
271
|
-
* @internal
|
|
272
|
-
*/
|
|
273
|
-
_ssrExternals: string[] | null
|
|
274
|
-
/**
|
|
275
|
-
* @internal
|
|
276
|
-
*/
|
|
277
|
-
_globImporters: Record<
|
|
278
|
-
string,
|
|
279
|
-
{
|
|
280
|
-
module: ModuleNode
|
|
281
|
-
importGlobs: {
|
|
282
|
-
base: string
|
|
283
|
-
pattern: string
|
|
284
|
-
}[]
|
|
285
|
-
}
|
|
286
|
-
>
|
|
287
|
-
/**
|
|
288
|
-
* @internal
|
|
289
|
-
*/
|
|
290
|
-
_isRunningOptimizer: boolean
|
|
291
|
-
/**
|
|
292
|
-
* @internal
|
|
293
|
-
*/
|
|
294
|
-
_registerMissingImport:
|
|
295
|
-
| ((id: string, resolved: string, ssr: boolean | undefined) => void)
|
|
296
|
-
| null
|
|
297
|
-
/**
|
|
298
|
-
* @internal
|
|
299
|
-
*/
|
|
300
|
-
_pendingReload: Promise<void> | null
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
export async function createServer(
|
|
304
|
-
inlineConfig: InlineConfig = {}
|
|
305
|
-
): Promise<ViteDevServer> {
|
|
306
|
-
const config = await resolveConfig(inlineConfig, 'serve', 'development')
|
|
307
|
-
const root = config.root
|
|
308
|
-
const serverConfig = config.server
|
|
309
|
-
const httpsOptions = await resolveHttpsConfig(config)
|
|
310
|
-
let { middlewareMode } = serverConfig
|
|
311
|
-
if (middlewareMode === true) {
|
|
312
|
-
middlewareMode = 'ssr'
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
const middlewares = connect() as Connect.Server
|
|
316
|
-
const httpServer = middlewareMode
|
|
317
|
-
? null
|
|
318
|
-
: await resolveHttpServer(serverConfig, middlewares, httpsOptions)
|
|
319
|
-
const ws = createWebSocketServer(httpServer, config, httpsOptions)
|
|
320
|
-
|
|
321
|
-
const { ignored = [], ...watchOptions } = serverConfig.watch || {}
|
|
322
|
-
const watcher = chokidar.watch(path.resolve(root), {
|
|
323
|
-
ignored: [
|
|
324
|
-
'**/node_modules/**',
|
|
325
|
-
'**/.git/**',
|
|
326
|
-
...(Array.isArray(ignored) ? ignored : [ignored])
|
|
327
|
-
],
|
|
328
|
-
ignoreInitial: true,
|
|
329
|
-
ignorePermissionErrors: true,
|
|
330
|
-
disableGlobbing: true,
|
|
331
|
-
...watchOptions
|
|
332
|
-
}) as FSWatcher
|
|
333
|
-
|
|
334
|
-
const plugins = config.plugins
|
|
335
|
-
const container = await createPluginContainer(config, watcher)
|
|
336
|
-
const moduleGraph = new ModuleGraph(container)
|
|
337
|
-
const closeHttpServer = createServerCloseFn(httpServer)
|
|
338
|
-
|
|
339
|
-
// eslint-disable-next-line prefer-const
|
|
340
|
-
let exitProcess: () => void
|
|
341
|
-
|
|
342
|
-
const server: ViteDevServer = {
|
|
343
|
-
config,
|
|
344
|
-
middlewares,
|
|
345
|
-
get app() {
|
|
346
|
-
config.logger.warn(
|
|
347
|
-
`ViteDevServer.app is deprecated. Use ViteDevServer.middlewares instead.`
|
|
348
|
-
)
|
|
349
|
-
return middlewares
|
|
350
|
-
},
|
|
351
|
-
httpServer,
|
|
352
|
-
watcher,
|
|
353
|
-
pluginContainer: container,
|
|
354
|
-
ws,
|
|
355
|
-
moduleGraph,
|
|
356
|
-
transformWithEsbuild,
|
|
357
|
-
transformRequest(url, options) {
|
|
358
|
-
return transformRequest(url, server, options)
|
|
359
|
-
},
|
|
360
|
-
transformIndexHtml: null!, // to be immediately set
|
|
361
|
-
ssrLoadModule(url) {
|
|
362
|
-
if (!server._ssrExternals) {
|
|
363
|
-
server._ssrExternals = resolveSSRExternal(
|
|
364
|
-
config,
|
|
365
|
-
server._optimizeDepsMetadata
|
|
366
|
-
? Object.keys(server._optimizeDepsMetadata.optimized)
|
|
367
|
-
: []
|
|
368
|
-
)
|
|
369
|
-
}
|
|
370
|
-
return ssrLoadModule(url, server)
|
|
371
|
-
},
|
|
372
|
-
ssrFixStacktrace(e) {
|
|
373
|
-
if (e.stack) {
|
|
374
|
-
const stacktrace = ssrRewriteStacktrace(e.stack, moduleGraph)
|
|
375
|
-
rebindErrorStacktrace(e, stacktrace)
|
|
376
|
-
}
|
|
377
|
-
},
|
|
378
|
-
listen(port?: number, isRestart?: boolean) {
|
|
379
|
-
return startServer(server, port, isRestart)
|
|
380
|
-
},
|
|
381
|
-
async close() {
|
|
382
|
-
process.off('SIGTERM', exitProcess)
|
|
383
|
-
|
|
384
|
-
if (!middlewareMode && process.env.CI !== 'true') {
|
|
385
|
-
process.stdin.off('end', exitProcess)
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
await Promise.all([
|
|
389
|
-
watcher.close(),
|
|
390
|
-
ws.close(),
|
|
391
|
-
container.close(),
|
|
392
|
-
closeHttpServer()
|
|
393
|
-
])
|
|
394
|
-
},
|
|
395
|
-
_optimizeDepsMetadata: null,
|
|
396
|
-
_ssrExternals: null,
|
|
397
|
-
_globImporters: {},
|
|
398
|
-
_isRunningOptimizer: false,
|
|
399
|
-
_registerMissingImport: null,
|
|
400
|
-
_pendingReload: null
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
server.transformIndexHtml = createDevHtmlTransformFn(server)
|
|
404
|
-
|
|
405
|
-
exitProcess = async () => {
|
|
406
|
-
try {
|
|
407
|
-
await server.close()
|
|
408
|
-
} finally {
|
|
409
|
-
process.exit(0)
|
|
410
|
-
}
|
|
411
|
-
}
|
|
412
|
-
|
|
413
|
-
process.once('SIGTERM', exitProcess)
|
|
414
|
-
|
|
415
|
-
if (!middlewareMode && process.env.CI !== 'true') {
|
|
416
|
-
process.stdin.on('end', exitProcess)
|
|
417
|
-
}
|
|
418
|
-
|
|
419
|
-
watcher.on('change', async (file) => {
|
|
420
|
-
file = normalizePath(file)
|
|
421
|
-
// invalidate module graph cache on file change
|
|
422
|
-
moduleGraph.onFileChange(file)
|
|
423
|
-
if (serverConfig.hmr !== false) {
|
|
424
|
-
try {
|
|
425
|
-
await handleHMRUpdate(file, server)
|
|
426
|
-
} catch (err) {
|
|
427
|
-
ws.send({
|
|
428
|
-
type: 'error',
|
|
429
|
-
err: prepareError(err)
|
|
430
|
-
})
|
|
431
|
-
}
|
|
432
|
-
}
|
|
433
|
-
})
|
|
434
|
-
|
|
435
|
-
watcher.on('add', (file) => {
|
|
436
|
-
handleFileAddUnlink(normalizePath(file), server)
|
|
437
|
-
})
|
|
438
|
-
|
|
439
|
-
watcher.on('unlink', (file) => {
|
|
440
|
-
handleFileAddUnlink(normalizePath(file), server, true)
|
|
441
|
-
})
|
|
442
|
-
|
|
443
|
-
if (!middlewareMode && httpServer) {
|
|
444
|
-
httpServer.once('listening', () => {
|
|
445
|
-
// update actual port since this may be different from initial value
|
|
446
|
-
serverConfig.port = (httpServer.address() as AddressInfo).port
|
|
447
|
-
})
|
|
448
|
-
}
|
|
449
|
-
|
|
450
|
-
// apply server configuration hooks from plugins
|
|
451
|
-
const postHooks: ((() => void) | void)[] = []
|
|
452
|
-
for (const plugin of plugins) {
|
|
453
|
-
if (plugin.configureServer) {
|
|
454
|
-
postHooks.push(await plugin.configureServer(server))
|
|
455
|
-
}
|
|
456
|
-
}
|
|
457
|
-
|
|
458
|
-
// Internal middlewares ------------------------------------------------------
|
|
459
|
-
|
|
460
|
-
// request timer
|
|
461
|
-
if (process.env.DEBUG) {
|
|
462
|
-
middlewares.use(timeMiddleware(root))
|
|
463
|
-
}
|
|
464
|
-
|
|
465
|
-
// cors (enabled by default)
|
|
466
|
-
const { cors } = serverConfig
|
|
467
|
-
if (cors !== false) {
|
|
468
|
-
middlewares.use(corsMiddleware(typeof cors === 'boolean' ? {} : cors))
|
|
469
|
-
}
|
|
470
|
-
|
|
471
|
-
// proxy
|
|
472
|
-
const { proxy } = serverConfig
|
|
473
|
-
if (proxy) {
|
|
474
|
-
middlewares.use(proxyMiddleware(httpServer, config))
|
|
475
|
-
}
|
|
476
|
-
|
|
477
|
-
// base
|
|
478
|
-
if (config.base !== '/') {
|
|
479
|
-
middlewares.use(baseMiddleware(server))
|
|
480
|
-
}
|
|
481
|
-
|
|
482
|
-
// open in editor support
|
|
483
|
-
middlewares.use('/__open-in-editor', launchEditorMiddleware())
|
|
484
|
-
|
|
485
|
-
// hmr reconnect ping
|
|
486
|
-
// Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...`
|
|
487
|
-
middlewares.use('/__vite_ping', function viteHMRPingMiddleware(_, res) {
|
|
488
|
-
res.end('pong')
|
|
489
|
-
})
|
|
490
|
-
|
|
491
|
-
// serve static files under /public
|
|
492
|
-
// this applies before the transform middleware so that these files are served
|
|
493
|
-
// as-is without transforms.
|
|
494
|
-
if (config.publicDir) {
|
|
495
|
-
middlewares.use(servePublicMiddleware(config.publicDir))
|
|
496
|
-
}
|
|
497
|
-
|
|
498
|
-
// main transform middleware
|
|
499
|
-
middlewares.use(transformMiddleware(server))
|
|
500
|
-
|
|
501
|
-
// serve static files
|
|
502
|
-
middlewares.use(serveRawFsMiddleware(server))
|
|
503
|
-
middlewares.use(serveStaticMiddleware(root, config))
|
|
504
|
-
|
|
505
|
-
// spa fallback
|
|
506
|
-
if (!middlewareMode || middlewareMode === 'html') {
|
|
507
|
-
middlewares.use(spaFallbackMiddleware(root))
|
|
508
|
-
}
|
|
509
|
-
|
|
510
|
-
// run post config hooks
|
|
511
|
-
// This is applied before the html middleware so that user middleware can
|
|
512
|
-
// serve custom content instead of index.html.
|
|
513
|
-
postHooks.forEach((fn) => fn && fn())
|
|
514
|
-
|
|
515
|
-
if (!middlewareMode || middlewareMode === 'html') {
|
|
516
|
-
// transform index.html
|
|
517
|
-
middlewares.use(indexHtmlMiddleware(server))
|
|
518
|
-
// handle 404s
|
|
519
|
-
// Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...`
|
|
520
|
-
middlewares.use(function vite404Middleware(_, res) {
|
|
521
|
-
res.statusCode = 404
|
|
522
|
-
res.end()
|
|
523
|
-
})
|
|
524
|
-
}
|
|
525
|
-
|
|
526
|
-
// error handler
|
|
527
|
-
middlewares.use(errorMiddleware(server, !!middlewareMode))
|
|
528
|
-
|
|
529
|
-
const runOptimize = async () => {
|
|
530
|
-
if (config.cacheDir) {
|
|
531
|
-
server._isRunningOptimizer = true
|
|
532
|
-
try {
|
|
533
|
-
server._optimizeDepsMetadata = await optimizeDeps(config)
|
|
534
|
-
} finally {
|
|
535
|
-
server._isRunningOptimizer = false
|
|
536
|
-
}
|
|
537
|
-
server._registerMissingImport = createMissingImporterRegisterFn(server)
|
|
538
|
-
}
|
|
539
|
-
}
|
|
540
|
-
|
|
541
|
-
if (!middlewareMode && httpServer) {
|
|
542
|
-
let isOptimized = false
|
|
543
|
-
// overwrite listen to run optimizer before server start
|
|
544
|
-
const listen = httpServer.listen.bind(httpServer)
|
|
545
|
-
httpServer.listen = (async (port: number, ...args: any[]) => {
|
|
546
|
-
if (!isOptimized) {
|
|
547
|
-
try {
|
|
548
|
-
await container.buildStart({})
|
|
549
|
-
await runOptimize()
|
|
550
|
-
isOptimized = true
|
|
551
|
-
} catch (e) {
|
|
552
|
-
httpServer.emit('error', e)
|
|
553
|
-
return
|
|
554
|
-
}
|
|
555
|
-
}
|
|
556
|
-
return listen(port, ...args)
|
|
557
|
-
}) as any
|
|
558
|
-
} else {
|
|
559
|
-
await container.buildStart({})
|
|
560
|
-
await runOptimize()
|
|
561
|
-
}
|
|
562
|
-
|
|
563
|
-
return server
|
|
564
|
-
}
|
|
565
|
-
|
|
566
|
-
async function startServer(
|
|
567
|
-
server: ViteDevServer,
|
|
568
|
-
inlinePort?: number,
|
|
569
|
-
isRestart: boolean = false
|
|
570
|
-
): Promise<ViteDevServer> {
|
|
571
|
-
const httpServer = server.httpServer
|
|
572
|
-
if (!httpServer) {
|
|
573
|
-
throw new Error('Cannot call server.listen in middleware mode.')
|
|
574
|
-
}
|
|
575
|
-
|
|
576
|
-
const options = server.config.server
|
|
577
|
-
const port = inlinePort || options.port || 3000
|
|
578
|
-
const hostname = resolveHostname(options.host)
|
|
579
|
-
|
|
580
|
-
const protocol = options.https ? 'https' : 'http'
|
|
581
|
-
const info = server.config.logger.info
|
|
582
|
-
const base = server.config.base
|
|
583
|
-
|
|
584
|
-
const serverPort = await httpServerStart(httpServer, {
|
|
585
|
-
port,
|
|
586
|
-
strictPort: options.strictPort,
|
|
587
|
-
host: hostname.host,
|
|
588
|
-
logger: server.config.logger
|
|
589
|
-
})
|
|
590
|
-
|
|
591
|
-
info(
|
|
592
|
-
chalk.cyan(`\n vite v${require('vite/package.json').version}`) +
|
|
593
|
-
chalk.green(` dev server running at:\n`),
|
|
594
|
-
{
|
|
595
|
-
clear: !server.config.logger.hasWarned
|
|
596
|
-
}
|
|
597
|
-
)
|
|
598
|
-
|
|
599
|
-
printServerUrls(hostname, protocol, serverPort, base, info)
|
|
600
|
-
|
|
601
|
-
// @ts-ignore
|
|
602
|
-
if (global.__vite_start_time) {
|
|
603
|
-
info(
|
|
604
|
-
chalk.cyan(
|
|
605
|
-
// @ts-ignore
|
|
606
|
-
`\n ready in ${Date.now() - global.__vite_start_time}ms.\n`
|
|
607
|
-
)
|
|
608
|
-
)
|
|
609
|
-
}
|
|
610
|
-
|
|
611
|
-
// @ts-ignore
|
|
612
|
-
const profileSession = global.__vite_profile_session
|
|
613
|
-
if (profileSession) {
|
|
614
|
-
profileSession.post('Profiler.stop', (err: any, { profile }: any) => {
|
|
615
|
-
// Write profile to disk, upload, etc.
|
|
616
|
-
if (!err) {
|
|
617
|
-
const outPath = path.resolve('./vite-profile.cpuprofile')
|
|
618
|
-
fs.writeFileSync(outPath, JSON.stringify(profile))
|
|
619
|
-
info(
|
|
620
|
-
chalk.yellow(` CPU profile written to ${chalk.white.dim(outPath)}\n`)
|
|
621
|
-
)
|
|
622
|
-
} else {
|
|
623
|
-
throw err
|
|
624
|
-
}
|
|
625
|
-
})
|
|
626
|
-
}
|
|
627
|
-
|
|
628
|
-
if (options.open && !isRestart) {
|
|
629
|
-
const path = typeof options.open === 'string' ? options.open : base
|
|
630
|
-
openBrowser(
|
|
631
|
-
`${protocol}://${hostname.name}:${serverPort}${path}`,
|
|
632
|
-
true,
|
|
633
|
-
server.config.logger
|
|
634
|
-
)
|
|
635
|
-
}
|
|
636
|
-
|
|
637
|
-
return server
|
|
638
|
-
}
|
|
639
|
-
|
|
640
|
-
function createServerCloseFn(server: http.Server | null) {
|
|
641
|
-
if (!server) {
|
|
642
|
-
return () => {}
|
|
643
|
-
}
|
|
644
|
-
|
|
645
|
-
let hasListened = false
|
|
646
|
-
const openSockets = new Set<net.Socket>()
|
|
647
|
-
|
|
648
|
-
server.on('connection', (socket) => {
|
|
649
|
-
openSockets.add(socket)
|
|
650
|
-
socket.on('close', () => {
|
|
651
|
-
openSockets.delete(socket)
|
|
652
|
-
})
|
|
653
|
-
})
|
|
654
|
-
|
|
655
|
-
server.once('listening', () => {
|
|
656
|
-
hasListened = true
|
|
657
|
-
})
|
|
658
|
-
|
|
659
|
-
return () =>
|
|
660
|
-
new Promise<void>((resolve, reject) => {
|
|
661
|
-
openSockets.forEach((s) => s.destroy())
|
|
662
|
-
if (hasListened) {
|
|
663
|
-
server.close((err) => {
|
|
664
|
-
if (err) {
|
|
665
|
-
reject(err)
|
|
666
|
-
} else {
|
|
667
|
-
resolve()
|
|
668
|
-
}
|
|
669
|
-
})
|
|
670
|
-
} else {
|
|
671
|
-
resolve()
|
|
672
|
-
}
|
|
673
|
-
})
|
|
674
|
-
}
|
|
675
|
-
|
|
676
|
-
function resolvedAllowDir(root: string, dir: string): string {
|
|
677
|
-
return ensureLeadingSlash(normalizePath(path.resolve(root, dir)))
|
|
678
|
-
}
|
|
679
|
-
|
|
680
|
-
export function resolveServerOptions(
|
|
681
|
-
root: string,
|
|
682
|
-
raw?: ServerOptions
|
|
683
|
-
): ResolvedServerOptions {
|
|
684
|
-
const server = raw || {}
|
|
685
|
-
let allowDirs = server.fs?.allow
|
|
686
|
-
|
|
687
|
-
if (!allowDirs) {
|
|
688
|
-
allowDirs = [searchForWorkspaceRoot(root)]
|
|
689
|
-
}
|
|
690
|
-
|
|
691
|
-
allowDirs = allowDirs.map((i) => resolvedAllowDir(root, i))
|
|
692
|
-
|
|
693
|
-
// only push client dir when vite itself is outside-of-root
|
|
694
|
-
const resolvedClientDir = resolvedAllowDir(root, CLIENT_DIR)
|
|
695
|
-
if (!allowDirs.some((i) => resolvedClientDir.startsWith(i))) {
|
|
696
|
-
allowDirs.push(resolvedClientDir)
|
|
697
|
-
}
|
|
698
|
-
|
|
699
|
-
server.fs = {
|
|
700
|
-
// TODO: make strict by default
|
|
701
|
-
strict: server.fs?.strict,
|
|
702
|
-
allow: allowDirs
|
|
703
|
-
}
|
|
704
|
-
return server as ResolvedServerOptions
|
|
705
|
-
}
|