From a18bb16f6ae6f2f8968b5d15650091b9277edc82 Mon Sep 17 00:00:00 2001 From: Gavin Ray Date: Thu, 13 May 2021 09:42:48 -0400 Subject: [PATCH 1/5] feat(config): allow user custom .env files directory (take 2) --- docs/config/index.md | 8 ++++++++ docs/guide/env-and-mode.md | 2 +- packages/playground/env/{ => env}/.env | 0 .../playground/env/{ => env}/.env.development | 0 packages/playground/env/{ => env}/.env.production | 0 packages/vite/src/node/config.ts | 15 ++++++++++++--- 6 files changed, 21 insertions(+), 4 deletions(-) rename packages/playground/env/{ => env}/.env (100%) rename packages/playground/env/{ => env}/.env.development (100%) rename packages/playground/env/{ => env}/.env.production (100%) diff --git a/docs/config/index.md b/docs/config/index.md index 41b0bfe04a85b7..97dc8b8f3dc86b 100644 --- a/docs/config/index.md +++ b/docs/config/index.md @@ -322,6 +322,14 @@ export default async ({ 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. + See [here](/guide/env-and-mode#env-files) for more about environment files. + ## Server Options ### server.host diff --git a/docs/guide/env-and-mode.md b/docs/guide/env-and-mode.md index d58063554cb973..4d92ee03b36a6d 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 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/vite/src/node/config.ts b/packages/vite/src/node/config.ts index c5813512f3910b..d8459a39231222 100644 --- a/packages/vite/src/node/config.ts +++ b/packages/vite/src/node/config.ts @@ -155,6 +155,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 @@ -304,7 +310,10 @@ export async function resolveConfig( } // load .env files - const userEnv = inlineConfig.envFile !== false && loadEnv(mode, resolvedRoot) + const envDir = config.envDir + ? normalizePath(path.resolve(resolvedRoot, config.envDir)) + : resolvedRoot + const userEnv = inlineConfig.envFile !== false && 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 @@ -912,7 +921,7 @@ async function loadConfigFromBundledFile( export function loadEnv( mode: string, - root: string, + envDir: string, prefix = 'VITE_' ): Record { if (mode === 'local') { @@ -939,7 +948,7 @@ export function loadEnv( } 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 196d72f90d71ccafbb819e6f28170a31e72c3fc9 Mon Sep 17 00:00:00 2001 From: Gavin Ray Date: Thu, 13 May 2021 09:46:54 -0400 Subject: [PATCH 2/5] fix(config): Add Playground env config for test --- packages/playground/env/vite.config.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 packages/playground/env/vite.config.js diff --git a/packages/playground/env/vite.config.js b/packages/playground/env/vite.config.js new file mode 100644 index 00000000000000..9d0ea0aab6b40f --- /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 + } +} \ No newline at end of file From 8ba65949a91cb93d9d13f2acd9431d6d517517fb Mon Sep 17 00:00:00 2001 From: Alec Larson <1925840+aleclarson@users.noreply.github.com> Date: Fri, 28 May 2021 11:00:35 -0400 Subject: [PATCH 3/5] Revert "fix(config): Add Playground env config for test" This reverts commit 196d72f90d71ccafbb819e6f28170a31e72c3fc9. --- packages/playground/env/vite.config.js | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 packages/playground/env/vite.config.js diff --git a/packages/playground/env/vite.config.js b/packages/playground/env/vite.config.js deleted file mode 100644 index 9d0ea0aab6b40f..00000000000000 --- a/packages/playground/env/vite.config.js +++ /dev/null @@ -1,11 +0,0 @@ -const path = require('path') - -/** - * @type {import('vite').UserConfig} - */ -module.exports = { - envDir: path.resolve(__dirname, 'env'), - build: { - minify: false - } -} \ No newline at end of file From c3a5a184e163dca9f52ad12b4a2e80cceec1f504 Mon Sep 17 00:00:00 2001 From: Alec Larson <1925840+aleclarson@users.noreply.github.com> Date: Fri, 28 May 2021 11:00:50 -0400 Subject: [PATCH 4/5] docs: tweak the envDir description --- docs/config/index.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/config/index.md b/docs/config/index.md index 97dc8b8f3dc86b..10863a7b9a88f0 100644 --- a/docs/config/index.md +++ b/docs/config/index.md @@ -327,7 +327,8 @@ export default async ({ command, mode }) => { - **Type:** `string` - **Default:** `root` - Environment files directory. Can be an absolute path, or a path relative from the location of the config file itself. + The directory from which `.env` files are loaded. Can be an absolute path, or a path relative to the project root. + See [here](/guide/env-and-mode#env-files) for more about environment files. ## Server Options From bd147c9aa186bfa2860f130ebf75aba8c1eff7d4 Mon Sep 17 00:00:00 2001 From: Alec Larson <1925840+aleclarson@users.noreply.github.com> Date: Fri, 28 May 2021 12:11:16 -0400 Subject: [PATCH 5/5] chore: move .env files back to project root --- packages/playground/env/{env => }/.env | 0 packages/playground/env/{env => }/.env.development | 0 packages/playground/env/{env => }/.env.production | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename packages/playground/env/{env => }/.env (100%) rename packages/playground/env/{env => }/.env.development (100%) rename packages/playground/env/{env => }/.env.production (100%) diff --git a/packages/playground/env/env/.env b/packages/playground/env/.env similarity index 100% rename from packages/playground/env/env/.env rename to packages/playground/env/.env diff --git a/packages/playground/env/env/.env.development b/packages/playground/env/.env.development similarity index 100% rename from packages/playground/env/env/.env.development rename to packages/playground/env/.env.development diff --git a/packages/playground/env/env/.env.production b/packages/playground/env/.env.production similarity index 100% rename from packages/playground/env/env/.env.production rename to packages/playground/env/.env.production