From 396bbf8c869b23360a39bc4d99b760e25645c84b Mon Sep 17 00:00:00 2001 From: Evan You Date: Thu, 7 Jan 2021 10:43:27 -0500 Subject: [PATCH] feat: support specifying mode in user config close #1380 --- packages/vite/src/node/build.ts | 9 +------- packages/vite/src/node/cli.ts | 11 ++++----- packages/vite/src/node/config.ts | 18 ++++++++++----- packages/vite/src/node/server/index.ts | 32 +++++++++----------------- 4 files changed, 28 insertions(+), 42 deletions(-) diff --git a/packages/vite/src/node/build.ts b/packages/vite/src/node/build.ts index ebc1ac71eeacad..42e12b92c805cb 100644 --- a/packages/vite/src/node/build.ts +++ b/packages/vite/src/node/build.ts @@ -254,14 +254,7 @@ export async function build( async function doBuild( inlineConfig: InlineConfig = {} ): Promise { - const config = await resolveConfig( - { - ...inlineConfig, - mode: inlineConfig.mode || 'production' - }, - 'build' - ) - + const config = await resolveConfig(inlineConfig, 'build', 'production') config.logger.info(chalk.cyan(`building for production...`)) const options = config.build diff --git a/packages/vite/src/node/cli.ts b/packages/vite/src/node/cli.ts index bd33a6a61c30e1..5efccd5796eba1 100644 --- a/packages/vite/src/node/cli.ts +++ b/packages/vite/src/node/cli.ts @@ -61,9 +61,7 @@ cli .option('--https', `[boolean] use TLS + HTTP/2`) .option('--open [browser]', `[boolean | string] open browser on startup`) .option('--cors', `[boolean] enable CORS`) - .option('-m, --mode ', `[string] set env mode`, { - default: 'development' - }) + .option('-m, --mode ', `[string] set env mode`) .option( '--force', `[boolean] force the optimizer to ignore the cache and re-bundle` @@ -113,9 +111,7 @@ cli `or specify minifier to use (default: terser)` ) .option('--manifest', `[boolean] emit build manifest json`) - .option('-m, --mode ', `[string] set env mode`, { - default: 'production' - }) + .option('-m, --mode ', `[string] set env mode`) .action(async (root: string, options: BuildOptions & GlobalCLIOptions) => { const { build } = await import('./build') try { @@ -150,7 +146,8 @@ cli configFile: options.config, logLevel: options.logLevel }, - 'build' + 'build', + 'development' ) await optimizeDeps(config, options.force, true) } catch (e) { diff --git a/packages/vite/src/node/config.ts b/packages/vite/src/node/config.ts index b49c496a83fd54..89d81da2770867 100644 --- a/packages/vite/src/node/config.ts +++ b/packages/vite/src/node/config.ts @@ -45,6 +45,11 @@ export interface UserConfig { * @default process.cwd() */ root?: string + /** + * Explicitly set a mode to run in. This will override the default mode for + * each command, and can be overridden by the command line --mode option. + */ + mode?: string /** * Import aliases */ @@ -96,7 +101,6 @@ export interface UserConfig { } export interface InlineConfig extends UserConfig { - mode?: string configFile?: string | false } @@ -121,12 +125,12 @@ export type ResolvedConfig = Readonly< export async function resolveConfig( inlineConfig: InlineConfig, - command: 'build' | 'serve' + command: 'build' | 'serve', + defaultMode = 'development' ): Promise { let config = inlineConfig - let { configFile } = inlineConfig - const mode = inlineConfig.mode || 'development' - + let mode = defaultMode + let { configFile } = config if (configFile !== false) { const loadResult = await loadConfigFromFile( { @@ -134,7 +138,7 @@ export async function resolveConfig( command }, configFile, - inlineConfig.root, + config.root, config.logLevel ) if (loadResult) { @@ -142,6 +146,8 @@ export async function resolveConfig( configFile = loadResult.path } } + // user config may provide an alternative mode + mode = config.mode || mode // resolve plugins const rawUserPlugins = (config.plugins || []).flat().filter((p) => { diff --git a/packages/vite/src/node/server/index.ts b/packages/vite/src/node/server/index.ts index 140b087895d846..183d740f6434e1 100644 --- a/packages/vite/src/node/server/index.ts +++ b/packages/vite/src/node/server/index.ts @@ -187,17 +187,10 @@ export interface ViteDevServer { export async function createServer( inlineConfig: InlineConfig = {} ): Promise { - const resolvedConfig = await resolveConfig( - { - ...inlineConfig, - mode: inlineConfig.mode || 'development' - }, - 'serve' - ) - - const root = resolvedConfig.root - const logger = createLogger(resolvedConfig.logLevel) - const serverConfig = resolvedConfig.server || {} + const config = await resolveConfig(inlineConfig, 'serve', 'development') + const root = config.root + const logger = createLogger(config.logLevel) + const serverConfig = config.server || {} const app = connect() as Connect.Server const httpServer = await resolveHttpServer(serverConfig, app) @@ -215,13 +208,13 @@ export async function createServer( ...watchOptions }) as FSWatcher - const plugins = resolvedConfig.plugins - const container = await createPluginContainer(resolvedConfig, watcher) + const plugins = config.plugins + const container = await createPluginContainer(config, watcher) const moduleGraph = new ModuleGraph(container) const closeHttpServer = createSeverCloseFn(httpServer) const server: ViteDevServer = { - config: resolvedConfig, + config: config, app, httpServer, watcher, @@ -302,7 +295,7 @@ export async function createServer( // serve static files app.use(rawFsStaticMiddleware()) - app.use(serveStaticMiddleware(root, resolvedConfig)) + app.use(serveStaticMiddleware(root, config)) // spa fallback app.use( @@ -347,14 +340,11 @@ export async function createServer( httpServer.listen = (async (port: number, ...args: any[]) => { await container.buildStart({}) - if (resolvedConfig.optimizeCacheDir) { + if (config.optimizeCacheDir) { // run optimizer - await optimizeDeps(resolvedConfig) + await optimizeDeps(config) // after optimization, read updated optimization metadata - const dataPath = path.resolve( - resolvedConfig.optimizeCacheDir, - 'metadata.json' - ) + const dataPath = path.resolve(config.optimizeCacheDir, 'metadata.json') if (fs.existsSync(dataPath)) { server.optimizeDepsMetadata = JSON.parse( fs.readFileSync(dataPath, 'utf-8')