From 2e080c259fc5068fcc71e3790b4f5b75cef83eea Mon Sep 17 00:00:00 2001 From: Christian Preston Date: Mon, 26 Sep 2022 06:36:10 -0400 Subject: [PATCH] feat(nuxi): support `--dotenv` for `dev`, `build` and `preview` commands (#7660) --- docs/content/3.api/5.commands/build.md | 5 +++-- docs/content/3.api/5.commands/dev.md | 3 ++- docs/content/3.api/5.commands/preview.md | 3 ++- packages/nuxi/src/commands/build.ts | 6 +++++- packages/nuxi/src/commands/dev.ts | 4 ++-- packages/nuxi/src/commands/preview.ts | 7 ++++--- 6 files changed, 18 insertions(+), 10 deletions(-) diff --git a/docs/content/3.api/5.commands/build.md b/docs/content/3.api/5.commands/build.md index fbedf82429..696f3e8a72 100644 --- a/docs/content/3.api/5.commands/build.md +++ b/docs/content/3.api/5.commands/build.md @@ -1,7 +1,7 @@ # `nuxi build` ```{bash} -npx nuxi build [rootDir] +npx nuxi build [rootDir] [--prerender] [--dotenv] ``` The `build` command creates a `.output` directory with all your application, server and dependencies ready for production. @@ -9,6 +9,7 @@ The `build` command creates a `.output` directory with all your application, ser Option | Default | Description -------------------------|-----------------|------------------ `rootDir` | `.` | The root directory of the application to bundle. -`prerender` | `false` | Pre-render every route of your application. (**note:** This is an experimental flag. The behavior might be changed.) +`--prerender` | `false` | Pre-render every route of your application. (**note:** This is an experimental flag. The behavior might be changed.) +`--dotenv` | `.` | Point to another `.env` file to load, **relative** to the root directory. This command sets `process.env.NODE_ENV` to `production`. diff --git a/docs/content/3.api/5.commands/dev.md b/docs/content/3.api/5.commands/dev.md index ef603dbbc8..fc74a0d5b0 100644 --- a/docs/content/3.api/5.commands/dev.md +++ b/docs/content/3.api/5.commands/dev.md @@ -1,7 +1,7 @@ # `nuxi dev` ```{bash} -npx nuxi dev [rootDir] [--clipboard] [--open, -o] [--no-clear] [--port, -p] [--host, -h] [--https] [--ssl-cert] [--ssl-key] +npx nuxi dev [rootDir] [--dotenv] [--clipboard] [--open, -o] [--no-clear] [--port, -p] [--host, -h] [--https] [--ssl-cert] [--ssl-key] ``` The `dev` command starts a development server with hot module replacement at [http://localhost:3000](https://localhost:3000) @@ -9,6 +9,7 @@ The `dev` command starts a development server with hot module replacement at [ht Option | Default | Description -------------------------|-----------------|------------------ `rootDir` | `.` | The root directory of the application to serve. +`--dotenv` | `.` | Point to another `.env` file to load, **relative** to the root directory. `--clipboard` | `false` | Copy URL to clipboard. `--open, -o` | `false` | Open URL in browser. `--no-clear` | `false` | Does not clear the console after startup. diff --git a/docs/content/3.api/5.commands/preview.md b/docs/content/3.api/5.commands/preview.md index c7d2b524d1..4b86222e99 100644 --- a/docs/content/3.api/5.commands/preview.md +++ b/docs/content/3.api/5.commands/preview.md @@ -1,7 +1,7 @@ # `nuxi preview` ```{bash} -npx nuxi preview [rootDir] +npx nuxi preview [rootDir] [--dotenv] ``` The `preview` command starts a server to preview your Nuxt application after running the `build` command. @@ -9,6 +9,7 @@ The `preview` command starts a server to preview your Nuxt application after run Option | Default | Description -------------------------|-----------------|------------------ `rootDir` | `.` | The root directory of the application to preview. +`--dotenv` | `.` | Point to another `.env` file to load, **relative** to the root directory. This command sets `process.env.NODE_ENV` to `production`. To override, define `NODE_ENV` in a `.env` file or as command-line argument. diff --git a/packages/nuxi/src/commands/build.ts b/packages/nuxi/src/commands/build.ts index b2868355a0..da19795a5f 100644 --- a/packages/nuxi/src/commands/build.ts +++ b/packages/nuxi/src/commands/build.ts @@ -10,7 +10,7 @@ import { defineNuxtCommand } from './index' export default defineNuxtCommand({ meta: { name: 'build', - usage: 'npx nuxi build [--prerender] [rootDir]', + usage: 'npx nuxi build [--prerender] [--dotenv] [rootDir]', description: 'Build nuxt for production deployment' }, async invoke (args) { @@ -23,6 +23,10 @@ export default defineNuxtCommand({ const nuxt = await loadNuxt({ rootDir, + dotenv: { + cwd: rootDir, + fileName: args.dotenv + }, overrides: { _generate: args.prerender } diff --git a/packages/nuxi/src/commands/dev.ts b/packages/nuxi/src/commands/dev.ts index 826a07e829..54ed2a3f21 100644 --- a/packages/nuxi/src/commands/dev.ts +++ b/packages/nuxi/src/commands/dev.ts @@ -18,7 +18,7 @@ import { defineNuxtCommand } from './index' export default defineNuxtCommand({ meta: { name: 'dev', - usage: 'npx nuxi dev [rootDir] [--clipboard] [--open, -o] [--port, -p] [--host, -h] [--https] [--ssl-cert] [--ssl-key]', + usage: 'npx nuxi dev [rootDir] [--dotenv] [--clipboard] [--open, -o] [--port, -p] [--host, -h] [--https] [--ssl-cert] [--ssl-key]', description: 'Run nuxt development server' }, async invoke (args) { @@ -40,7 +40,7 @@ export default defineNuxtCommand({ const rootDir = resolve(args._[0] || '.') showVersions(rootDir) - await setupDotenv({ cwd: rootDir }) + await setupDotenv({ cwd: rootDir, fileName: args.dotenv }) const listener = await listen(serverHandler, { showURL: false, diff --git a/packages/nuxi/src/commands/preview.ts b/packages/nuxi/src/commands/preview.ts index 0fb07832a0..028367c465 100644 --- a/packages/nuxi/src/commands/preview.ts +++ b/packages/nuxi/src/commands/preview.ts @@ -10,7 +10,7 @@ import { defineNuxtCommand } from './index' export default defineNuxtCommand({ meta: { name: 'preview', - usage: 'npx nuxi preview|start [rootDir]', + usage: 'npx nuxi preview|start [--dotenv] [rootDir]', description: 'Launches nitro server for local testing after `nuxi build`.' }, async invoke (args) { @@ -35,9 +35,10 @@ export default defineNuxtCommand({ process.exit(1) } - if (existsSync(resolve(rootDir, '.env'))) { + const envExists = args.dotenv ? existsSync(resolve(rootDir, args.dotenv)) : existsSync(rootDir) + if (envExists) { consola.info('Loading `.env`. This will not be loaded when running the server in production.') - await setupDotenv({ cwd: rootDir }) + await setupDotenv({ cwd: rootDir, fileName: args.dotenv }) } consola.info('Starting preview command:', nitroJSON.commands.preview)