diff --git a/.changeset/open-oranges-shake.md b/.changeset/open-oranges-shake.md new file mode 100644 index 0000000000..f85753247f --- /dev/null +++ b/.changeset/open-oranges-shake.md @@ -0,0 +1,5 @@ +--- +"@lynx-js/rspeedy": patch +--- + +Support cli option `--no-env` to disable loading of .env files diff --git a/packages/rspeedy/core/src/cli/build.ts b/packages/rspeedy/core/src/cli/build.ts index 41e0b3b0a8..fdab475ba2 100644 --- a/packages/rspeedy/core/src/cli/build.ts +++ b/packages/rspeedy/core/src/cli/build.ts @@ -36,7 +36,9 @@ export async function build( rspeedyConfig, } - if (buildOptions.envMode) { + if (buildOptions.noEnv) { + options.loadEnv = false + } else if (buildOptions.envMode) { options.loadEnv = { mode: buildOptions.envMode } } diff --git a/packages/rspeedy/core/src/cli/commands.ts b/packages/rspeedy/core/src/cli/commands.ts index 291989a173..9de85ca5aa 100644 --- a/packages/rspeedy/core/src/cli/commands.ts +++ b/packages/rspeedy/core/src/cli/commands.ts @@ -13,6 +13,7 @@ import { version } from '../version.js' export interface CommonOptions { config?: string envMode?: string + noEnv?: boolean } function applyCommonOptions(command: Command) { @@ -23,7 +24,11 @@ function applyCommonOptions(command: Command) { ) .option( '--env-mode ', - 'specify the env mode to load the .env.[mode] file"', + 'specify the env mode to load the .env.[mode] file', + ) + .option( + '--no-env', + 'disable loading `.env` files"', ) } diff --git a/packages/rspeedy/core/src/cli/dev.ts b/packages/rspeedy/core/src/cli/dev.ts index a963459be4..97e7cb49d6 100644 --- a/packages/rspeedy/core/src/cli/dev.ts +++ b/packages/rspeedy/core/src/cli/dev.ts @@ -70,7 +70,9 @@ export async function dev( rspeedyConfig, } - if (devOptions.envMode) { + if (devOptions.noEnv) { + options.loadEnv = false + } else if (devOptions.envMode) { options.loadEnv = { mode: devOptions.envMode } } diff --git a/packages/rspeedy/core/src/cli/inspect.ts b/packages/rspeedy/core/src/cli/inspect.ts index 0ed1f02b53..6c775883cc 100644 --- a/packages/rspeedy/core/src/cli/inspect.ts +++ b/packages/rspeedy/core/src/cli/inspect.ts @@ -10,6 +10,7 @@ import type { CommonOptions } from './commands.js' import { exit } from './exit.js' import { loadConfig } from '../config/loadConfig.js' import { createRspeedy } from '../create-rspeedy.js' +import type { CreateRspeedyOptions } from '../create-rspeedy.js' export interface InspectOptions extends CommonOptions { mode?: 'production' | 'development' | undefined @@ -28,13 +29,18 @@ export async function inspect( configPath: inspectOptions.config, }) - const rspeedy = await createRspeedy({ + const options: CreateRspeedyOptions = { cwd, rspeedyConfig, - ...(inspectOptions.envMode - ? { loadEnv: { mode: inspectOptions.envMode } } - : {}), - }) + } + + if (inspectOptions.noEnv) { + options.loadEnv = false + } else if (inspectOptions.envMode) { + options.loadEnv = { mode: inspectOptions.envMode } + } + + const rspeedy = await createRspeedy(options) await rspeedy.inspectConfig({ mode: inspectOptions.mode diff --git a/packages/rspeedy/core/src/cli/preview.ts b/packages/rspeedy/core/src/cli/preview.ts index dc88aa0671..814d3575a2 100644 --- a/packages/rspeedy/core/src/cli/preview.ts +++ b/packages/rspeedy/core/src/cli/preview.ts @@ -11,6 +11,7 @@ import type { CommonOptions } from './commands.js' import { exit } from './exit.js' import { loadConfig, resolveConfigPath } from '../config/loadConfig.js' import { createRspeedy } from '../create-rspeedy.js' +import type { CreateRspeedyOptions } from '../create-rspeedy.js' export interface PreviewOptions extends CommonOptions { base?: string | undefined @@ -34,13 +35,18 @@ export async function preview( rspeedyConfig.server.base = previewOptions.base } - const rspeedy = await createRspeedy({ + const options: CreateRspeedyOptions = { cwd, rspeedyConfig, - ...(previewOptions.envMode - ? { loadEnv: { mode: previewOptions.envMode } } - : {}), - }) + } + + if (previewOptions.noEnv) { + options.loadEnv = false + } else if (previewOptions.envMode) { + options.loadEnv = { mode: previewOptions.envMode } + } + + const rspeedy = await createRspeedy(options) await rspeedy.initConfigs() diff --git a/packages/rspeedy/core/test/cli/config.test.ts b/packages/rspeedy/core/test/cli/config.test.ts index 403c073429..c163a97833 100644 --- a/packages/rspeedy/core/test/cli/config.test.ts +++ b/packages/rspeedy/core/test/cli/config.test.ts @@ -68,6 +68,36 @@ describe('rspeedy config test', () => { }), ) }) + + test('createRspeedy with no-env ', async () => { + const root = join(fixturesRoot, 'project-with-env') + const rsbuild = await createRspeedy({ + cwd: root, + loadEnv: false, + }) + const configs = await rsbuild.initConfigs() + const maybeDefinePluginInstance = configs[0]?.plugins?.filter((plugin) => { + if (plugin) { + return plugin.name === 'DefinePlugin' + } else { + return false + } + }) + + expect(maybeDefinePluginInstance).toHaveLength(1) + const defineInstance = maybeDefinePluginInstance![0] + + expect(defineInstance!).toMatchObject( + expect.objectContaining({ + _args: [ + expect.not.objectContaining({ + 'process.env.PUBLIC_FOO': '"BAR"', + 'process.env.PUBLIC_TEST': '"TEST"', + }), + ], + }), + ) + }) }) describe('rspeedy environment test', () => { diff --git a/website/docs/en/guide/cli.md b/website/docs/en/guide/cli.md index 9c12914347..b262703cfd 100644 --- a/website/docs/en/guide/cli.md +++ b/website/docs/en/guide/cli.md @@ -76,6 +76,7 @@ Options: -c --config specify the configuration file, can be a relative or absolute path --env-mode specify the env mode to load the .env.[mode] file --environment specify the name of environment to build + --no-env disable loading `.env` files" -h, --help display help for command ``` @@ -94,6 +95,7 @@ Options: -c --config specify the configuration file, can be a relative or absolute path --env-mode specify the env mode to load the .env.[mode] file --environment specify the name of environment to build + --no-env disable loading `.env` files" -h, --help display help for command ``` @@ -110,6 +112,7 @@ Options: -b --base specify the base path of the server -c --config specify the configuration file, can be a relative or absolute path --env-mode specify the env mode to load the .env.[mode] file + --no-env disable loading `.env` files" -h, --help display help for command ``` @@ -134,6 +137,7 @@ Options: --verbose show full function definitions in output -c --config specify the configuration file, can be a relative or absolute path --env-mode specify the env mode to load the .env.[mode] file + --no-env disable loading `.env` files" -h, --help display help for command ``` diff --git a/website/docs/zh/guide/cli.md b/website/docs/zh/guide/cli.md index 0df489a041..1c367acf71 100644 --- a/website/docs/zh/guide/cli.md +++ b/website/docs/zh/guide/cli.md @@ -74,6 +74,7 @@ Options: -c --config specify the configuration file, can be a relative or absolute path --env-mode specify the env mode to load the .env.[mode] file --environment specify the name of environment to build + --no-env disable loading `.env` files" -h, --help display help for command ``` @@ -92,6 +93,7 @@ Options: -c --config specify the configuration file, can be a relative or absolute path --env-mode specify the env mode to load the .env.[mode] file --environment specify the name of environment to build + --no-env disable loading `.env` files" -h, --help display help for command ``` @@ -108,6 +110,7 @@ Options: -b --base specify the base path of the server -c --config specify the configuration file, can be a relative or absolute path --env-mode specify the env mode to load the .env.[mode] file + --no-env disable loading `.env` files" -h, --help display help for command ``` @@ -132,6 +135,7 @@ Options: --verbose show full function definitions in output -c --config specify the configuration file, can be a relative or absolute path --env-mode specify the env mode to load the .env.[mode] file + --no-env disable loading `.env` files" -h, --help display help for command ```