From 59e2eaad42c9ac6cfe1be0ad41fedc03462ba1f4 Mon Sep 17 00:00:00 2001 From: CHOYSEN Date: Sat, 20 Feb 2021 14:50:05 +0800 Subject: [PATCH 1/3] feat(config): allow user custom .env files directory --- packages/vite/src/node/config.ts | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/packages/vite/src/node/config.ts b/packages/vite/src/node/config.ts index d985048c499d68..b72edda2612a94 100644 --- a/packages/vite/src/node/config.ts +++ b/packages/vite/src/node/config.ts @@ -138,6 +138,12 @@ export interface UserConfig { * Default: true */ clearScreen?: boolean + /** + * Environment files directory. Can be an absolute path, or a path relative from + * the location of the config file itself. + * @default root + */ + envDir?: string /** * Import aliases * @deprecated use `resolve.alias` instead @@ -268,7 +274,10 @@ export async function resolveConfig( } // load .env files - const userEnv = loadEnv(mode, resolvedRoot) + const envDir = config.envDir + ? normalizePath(path.resolve(config.envDir)) + : resolvedRoot + const userEnv = loadEnv(mode, envDir) // Note it is possible for user to have a custom mode, e.g. `staging` where // production-like behavior is expected. This is indicated by NODE_ENV=production @@ -788,7 +797,7 @@ async function loadConfigFromBundledFile( return config } -export function loadEnv(mode: string, root: string, prefix = 'VITE_') { +export function loadEnv(mode: string, envDir: string, prefix = 'VITE_') { if (mode === 'local') { throw new Error( `"local" cannot be used as a mode name because it conflicts with ` + @@ -813,7 +822,7 @@ export function loadEnv(mode: string, root: string, prefix = 'VITE_') { } for (const file of envFiles) { - const path = lookupFile(root, [file], true) + const path = lookupFile(envDir, [file], true) if (path) { const parsed = dotenv.parse(fs.readFileSync(path), { debug: !!process.env.DEBUG || undefined From 25e17f9d66d58733a6d17224b3440948c157b610 Mon Sep 17 00:00:00 2001 From: CHOYSEN Date: Sat, 20 Feb 2021 15:07:15 +0800 Subject: [PATCH 2/3] docs: about --- docs/config/index.md | 7 +++++++ docs/guide/env-and-mode.md | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/config/index.md b/docs/config/index.md index fe65ba3e9f5f0e..6e21d39b7266ec 100644 --- a/docs/config/index.md +++ b/docs/config/index.md @@ -299,6 +299,13 @@ export default ({ command, mode }) => { Set to `false` to prevent Vite from clearing the terminal screen when logging certain messages. Via command line, use `--clearScreen false`. +### envDir + +- **Type:** `string` +- **Default:** `root` + + Environment files directory. Can be an absolute path, or a path relative from the location of the config file itself. + ## Server Options ### server.host diff --git a/docs/guide/env-and-mode.md b/docs/guide/env-and-mode.md index 9180e552cc0637..2d6b794cc74d3f 100644 --- a/docs/guide/env-and-mode.md +++ b/docs/guide/env-and-mode.md @@ -24,7 +24,7 @@ It will also replace these strings appearing in JavaScript strings and Vue templ ## `.env` Files -Vite uses [dotenv](https://github.com/motdotla/dotenv) to load additional environment variables from the following files in your project root: +Vite uses [dotenv](https://github.com/motdotla/dotenv) to load additional environment variables from the following files in your [environment directory](/config/#envDir): ``` .env # loaded in all cases From 47ebc9683d6eb35ddd0ac7881893dd11dd750ffc Mon Sep 17 00:00:00 2001 From: CHOYSEN Date: Sat, 20 Feb 2021 18:34:45 +0800 Subject: [PATCH 3/3] test: move .env files to env directory --- packages/playground/env/{ => env}/.env | 0 packages/playground/env/{ => env}/.env.development | 0 packages/playground/env/{ => env}/.env.production | 0 packages/playground/env/vite.config.js | 11 +++++++++++ 4 files changed, 11 insertions(+) rename packages/playground/env/{ => env}/.env (100%) rename packages/playground/env/{ => env}/.env.development (100%) rename packages/playground/env/{ => env}/.env.production (100%) create mode 100644 packages/playground/env/vite.config.js diff --git a/packages/playground/env/.env b/packages/playground/env/env/.env similarity index 100% rename from packages/playground/env/.env rename to packages/playground/env/env/.env diff --git a/packages/playground/env/.env.development b/packages/playground/env/env/.env.development similarity index 100% rename from packages/playground/env/.env.development rename to packages/playground/env/env/.env.development diff --git a/packages/playground/env/.env.production b/packages/playground/env/env/.env.production similarity index 100% rename from packages/playground/env/.env.production rename to packages/playground/env/env/.env.production diff --git a/packages/playground/env/vite.config.js b/packages/playground/env/vite.config.js new file mode 100644 index 00000000000000..6ac90ce8750a8e --- /dev/null +++ b/packages/playground/env/vite.config.js @@ -0,0 +1,11 @@ +const path = require('path') + +/** + * @type {import('vite').UserConfig} + */ +module.exports = { + envDir: path.resolve(__dirname, 'env'), + build: { + minify: false + } +}