From a4706737a613b24cdce6bac1f14a73ad6fc9ea62 Mon Sep 17 00:00:00 2001 From: pengboUESTC Date: Wed, 5 Jul 2023 15:33:28 +0800 Subject: [PATCH] feat: patch dotenv file parse --- packages/taro-cli/src/cli.ts | 2 +- packages/taro-cli/src/util/index.ts | 24 ++++++++++++++++++++++-- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/packages/taro-cli/src/cli.ts b/packages/taro-cli/src/cli.ts index 10677fa2fffa..9435928b3806 100644 --- a/packages/taro-cli/src/cli.ts +++ b/packages/taro-cli/src/cli.ts @@ -59,7 +59,7 @@ export default class CLI { } const mode = args.mode || process.env.NODE_ENV // 这里解析 dotenv 以便于 config 解析时能获取 dotenv 配置信息 - const expandEnv = dotenvParse(appPath, args.envPrefix, mode) + const expandEnv = dotenvParse(appPath, args as unknown as Parameters[1]) const disableGlobalConfig = !!(args['disable-global-config'] || DISABLE_GLOBAL_CONFIG_COMMANDS.includes(command)) diff --git a/packages/taro-cli/src/util/index.ts b/packages/taro-cli/src/util/index.ts index 7a34f1bbf2ce..fca45a3d43a9 100644 --- a/packages/taro-cli/src/util/index.ts +++ b/packages/taro-cli/src/util/index.ts @@ -110,17 +110,37 @@ export const formatPrefix = (prefixs: string | string[] = ['TARO_APP_']): string const prefixsArr: string[] = (Array.isArray(prefixs) ? prefixs : prefixs.split(',')).map(prefix => prefix.trim()).filter(prefix => !!prefix) return prefixsArr } -export const dotenvParse = (root: string, prefixs: string | string[] = ['TARO_APP_'], mode?: string): Record => { - const prefixsArr: string[] = formatPrefix(prefixs) +export const dotenvParse = (root: string, options: { + prefixs: string | string[] + mode?: string + type?: string +}): Record => { + const { prefixs = ['TARO_APP_'], mode, type } = options + const prefixsArr: string[] = formatPrefix(prefixs) + // 默认 文件存在即读取 优先级最低 + // 不区分打包平台 不区分打包 mode const envFiles = new Set([ /** default file */ `.env`, /** local file */ `.env.local`, ]) + // 根据打包 平台 读取配置 文件 + // 可配置 特定平台 但是 不区分 mode 的配置信息 + if(type) { + envFiles.add(/** type file */ `.env.${type}`) + envFiles.add(/** type local file */ `.env.${type}.local`) + } if(mode) { + // 根据 打包 mode 读取配置文件 + // 可配置 特定 mode 但是不区分 平台 的配置信息 envFiles.add(/** mode file */ `.env.${mode}`) envFiles.add(/** mode local file */ `.env.${mode}.local`) + if(type) { + // 最高优先级 特定平台 特定 mode 的配置信息 + envFiles.add(/** mode type file */ `.env.${mode}.${type}`) + envFiles.add(/** mode type local file */ `.env.${mode}.${type}.local`) + } } let parseTemp = {}