Skip to content

Comments

fix(cli): support multiple comma-separated define arguments#7340

Merged
sapphi-red merged 11 commits intomainfrom
copilot/fix-multiple-define-arguments
Dec 5, 2025
Merged

fix(cli): support multiple comma-separated define arguments#7340
sapphi-red merged 11 commits intomainfrom
copilot/fix-multiple-define-arguments

Conversation

Copy link
Contributor

Copilot AI commented Dec 4, 2025

  • Investigate the issue with multiple --define arguments in CLI
  • Understand the current CLI argument parsing logic
  • Verify the bug: only last --transform.define argument is used
  • Fix comma-separated syntax to support multiple key=value pairs
  • Add test for comma-separated define arguments
  • Test the changes with existing test suite
  • Run linters and ensure code quality
  • Add explanation to --help message
  • Update comment and help message wording

Summary

Fixed the bug where only the first key-value pair was processed when using comma-separated --define syntax, and added helpful explanation to the help message.

Changes

CLI argument parsing (packages/rolldown/src/cli/arguments/index.ts)

  • Fixed comma-separated syntax to process all pairs: --transform.define __A__=A,__B__=B
    • Changed from processing only [0] to iterating all pairs
  • Updated comment to show syntax format: key1=value1,key2=value2

Help message (packages/rolldown/src/utils/validator.ts)

  • Updated description for --transform.define to explain the syntax
  • Now shows: "Define global variables (syntax: key=value,key2=value2)"

Tests (packages/rolldown/tests/cli/)

  • Added fixture and test case for comma-separated syntax
  • Updated snapshot to reflect new help message
  • Verifies all define values are replaced in output

Example

# Comma-separated syntax (fixed)
rolldown index.js --transform.define __A__=A,__B__=B,__C__=C

All defined variables are now correctly replaced instead of only the first one.

Original prompt

This section details on the original issue you should resolve

<issue_title>[Bug]: Feedback on Rolldown cli: For multiple define arguments, only the last one will be taken into account</issue_title>
<issue_description>> Just tried using it again, works great except that the CLI multiple define arguments will only take the last one.

Saw it on X.</issue_description>

<agent_instructions>Support --define.__A__ A --define.__B__ B</agent_instructions>

Comments on the Issue (you are @copilot in this section)

@IWANABETHATGUY Can you give an elaborate `define arguments`? Do you mean `--a test --a test2`? @hyf0 > Can you give an elaborate `define arguments`? Do you mean `--a test --a test2`?

The post I saw only contains

Just tried using it again, works great except that the CLI multiple define arguments will only take the last one.

and, that's all.

I created this issue to record we potentially might have this problem and need to investigate what it means.

@IWANABETHATGUY > > Can you give an elaborate `define arguments`? Do you mean `--a test --a test2`? > > The post I saw only contains > > > Just tried using it again, works great except that the CLI multiple define arguments will only take the last one. > > and, that's all. > > I created this issue to record we potentially might have this problem and need to investigate what it means.

I see</comment_new>
<comment_new>@hyf0
I personally suspect it's a problem of define argument.

Image

Just found the cli's description needs to be imporved too.</comment_new>
<comment_new>@sapphi-red
Posting some choices (if it's not implemented):

  • --define {__A__:A,__B__:B}
  • --define.__A__ A --define.__B__ B (aligns with other options)
  • --define:__A__ A --define:__B__ B (aligns with esbuild)
@hyf0 https://chatgpt.com/s/cd_68ef6d112f8481919a297ed54074a99b Codex's report. Yeah. It's a problem of `define` argument.

💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

@netlify
Copy link

netlify bot commented Dec 4, 2025

Deploy Preview for rolldown-rs canceled.

Name Link
🔨 Latest commit 2f97184
🔍 Latest deploy log https://app.netlify.com/projects/rolldown-rs/deploys/6932ffc491eb9d0008c1e910

Copilot AI changed the title [WIP] Fix handling of multiple define arguments in Rolldown CLI fix(cli): support multiple --define arguments Dec 4, 2025
Copilot AI requested a review from sapphi-red December 4, 2025 08:38
@sapphi-red
Copy link
Member

@copilot only support the comma separated style

Copy link
Contributor Author

Copilot AI commented Dec 4, 2025

@copilot only support the comma separated style

Done in ea5effe. Removed the dot notation syntax support and kept only the comma-separated style fix.

Copilot AI changed the title fix(cli): support multiple --define arguments fix(cli): support multiple comma-separated define arguments Dec 4, 2025
@sapphi-red
Copy link
Member

@copilot add explanation to the --help message

Copy link
Contributor Author

Copilot AI commented Dec 5, 2025

@copilot add explanation to the --help message

Done in f3ef2a9. Updated the help message to show the comma-separated syntax.

--transform.define <transform.define>Define global variables (comma-separated: key=value,key2=value2).

@sapphi-red sapphi-red marked this pull request as ready for review December 5, 2025 10:34
Copilot AI review requested due to automatic review settings December 5, 2025 10:34
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes a bug where only the first key-value pair was processed when using comma-separated --define syntax in the CLI. The fix changes the parsing logic to iterate through all comma-separated pairs instead of only taking the first one.

Key Changes:

  • Fixed the CLI argument parser to loop through all key-value pairs in comma-separated define arguments
  • Updated help message to clarify the syntax format: key=value,key2=value2
  • Added comprehensive test coverage for the comma-separated syntax

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
packages/rolldown/src/cli/arguments/index.ts Fixed the parsing logic to iterate through all comma-separated pairs instead of only processing [0]
packages/rolldown/src/utils/validator.ts Updated help message to document the comma-separated syntax format
packages/rolldown/tests/cli/cli-e2e.test.ts Added test case verifying all three define values are correctly replaced
packages/rolldown/tests/cli/fixtures/cli-option-multiple-define/index.js Created test fixture with three variables to be replaced
packages/rolldown/tests/cli/__snapshots__/cli-e2e.test.ts.snap Updated snapshots with new help message and test output

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Co-authored-by: Copilot <[email protected]>
Signed-off-by: 翠 <[email protected]>
Signed-off-by: 翠 <[email protected]>
@sapphi-red sapphi-red enabled auto-merge (squash) December 5, 2025 15:52
@sapphi-red sapphi-red merged commit 8784bf7 into main Dec 5, 2025
24 checks passed
@sapphi-red sapphi-red deleted the copilot/fix-multiple-define-arguments branch December 5, 2025 16:06
shulaoda added a commit that referenced this pull request Dec 11, 2025
## [1.0.0-beta.54] - 2025-12-11

⏱️ Plugin Timing Analysis
- Added `checks.pluginTimings` option to emit warnings when plugins significantly impact build performance
- More details: https://rolldown.rs/options/checks#plugintimings
<img width="834" height="119" alt="image" src="https://github.com/user-attachments/assets/e819f906-6192-4503-8d5c-854fa92ecb45" />

> [!WARNING]
> For hooks using `ctx.resolve()` or `ctx.load()`, the reported time includes waiting for other plugins, which may overestimate that plugin's actual cost.
>
> Additionally, since plugin hooks execute concurrently, the statistics represent accumulated time rather than wall-clock time. The measured duration also includes Rust-side processing overhead, Tokio async scheduling overhead, NAPI data conversion overhead, and JavaScript event loop overhead.

### 🚀 Features

- rolldown_plugin_vite_reporter: add newline after build summary for better log separation (#7458) by @shulaoda
- plugin: collect plugin hook execution timings (#7364) by @shulaoda
- test-dev-server: reload page when detecting hmr reload message (#7422) by @hyf0
- rolldown_plugin_vite_dynamic_import_vars: add transform-based v2 implementation (#7400) by @shulaoda
- rolldown_plugin_vite_import_glob: add transform-based v2 implementation (#7394) by @shulaoda
- rolldown_plugin_vite_wasm_helper: add v2 implementation (#7402) by @shulaoda
- expose error location and context fields on JS API error objects (#7341) by @Copilot
- add `CIRCULAR_REEXPORT` error (#7337) by @Copilot
- support emit prebuilt chunk (#7277) by @Copilot

### 🐛 Bug Fixes

- preserve object key order when parse json with serde_json (#7443) by @IWANABETHATGUY
- improve JSON parsing with serde_json to emit proper diagnostic (#7442) by @IWANABETHATGUY
- deconflict external symbols in CJS modules (#7447) by @IWANABETHATGUY
- rolldown_plugin_vite_transform,rolldown_plugin_vite_resolve: enable `yarnPnp` option when pnp is detected (#5791) by @sapphi-red
- skip deconflicting top-level symbols for CJS modules (#7425) by @IWANABETHATGUY
- rolldown_plugin_esm_external_require: run resolveId hook before other plugins (#7426) by @shulaoda
- avoid duplicate underscores in legitimized identifiers (#7418) by @IWANABETHATGUY
- use `process.on('exit')` instead of `signal-exit` on webcontainers (#7421) by @sapphi-red
- dev: remove `imports` when an import is removed (#7348) by @sapphi-red
- bench: access latency.mean instead of mean in tinybench result (#7417) by @shulaoda
- path compression in symbol linking (#7392) by @IWANABETHATGUY
- rolldown_plugin_vite_resolve: add RwLock to avoid clearing cache while resolving (#7386) by @sapphi-red
- handle JSON prototype properties correctly (#7383) by @IWANABETHATGUY
- preserve entry signature strict chunk merging (#7343) by @IWANABETHATGUY
- support eliminating multiple unused dynamic imports in a single statement (#7361) by @IWANABETHATGUY
- eliminate unreachable dynamic entry (#7356) by @IWANABETHATGUY
- `NormalizedInputOptions#cwd` should always exists (#7360) by @hyf0
- cli: support multiple comma-separated define arguments (#7340) by @Copilot
- remove redundant symbol param in __reExport runtime helper (#7346) by @IWANABETHATGUY
- always use __export for empty namespace objects when symbols enabled (#7345) by @IWANABETHATGUY
- relax the restriction of preserveEntrySignatures when merging chunks (#7339) by @IWANABETHATGUY

### 🚜 Refactor

- builtin-plugin: make config parameter required for vite plugins (#7451) by @shulaoda
- move esbuild test related scripts to `scripts/src/esbuild-tests` (#7377) by @sapphi-red
- rewrite gen-esbuild-test in TypeScript (#7376) by @sapphi-red
- remove unnecessary Option in current_stmt_idx (#7359) by @IWANABETHATGUY
- move more code into chunk optimizer (#7335) by @IWANABETHATGUY

### 📚 Documentation

- checks: clarify pluginTimings measures CPU time due to concurrent execution (#7448) by @shulaoda
- checks: add accuracy note to pluginTimings documentation (#7441) by @shulaoda
- development-guide: add esbuild test description (#7439) by @sapphi-red
- checks: expand `pluginTimings` documentation with detection mechanism (#7428) by @shulaoda
- add checks options documentation (#7427) by @shulaoda
- development-guide: add test262 integration test description (#7430) by @sapphi-red
- guide: fix grammer in getting-started (#7331) by @jakeparis

### 🧪 Testing

- rollup-tests: make `--grep` work and document it (#7431) by @sapphi-red
- add a way to run some test262 test cases by name (#7429) by @sapphi-red
- rolldown_plugin_vite_dynamic_import_vars: add test cases for v2 implementation (#7401) by @shulaoda
- rolldown_plugin_vite_import_glob: add test cases for v2 implementation (#7395) by @shulaoda
- triage new esbuild tests (#7405) by @sapphi-red
- hmr: delete file used (#5933) by @sapphi-red
- watch: add `watchChange` hook `create` / `delete` tests (#7349) by @sapphi-red
- hmr: delete file not used anymore (#5932) by @sapphi-red
- triage esbuild failed reasons (#7391) by @sapphi-red
- change esbuild tests stats and diff generation (#7379) by @sapphi-red
- dev: add `continuous generate hmr patch` and `debounce bundle` tests (#7368) by @hyf0
- add new esbuild tests (#7353) by @sapphi-red

### ⚙️ Miscellaneous Tasks

- setup Node before updating snapshots for test262 update (#7435) by @sapphi-red
- run tests when submodules are updated (#7455) by @sapphi-red
- exclude NUL path pattern to prevent crash on Windows (#7450) by @IWANABETHATGUY
- run cargo-test for esbuild script changes and update esbuild snapshot (#7440) by @sapphi-red
- jsx_import_meta tests to `ignoreReasons` due to architectural limitation (#7434) by @Copilot
- deps: update dependency oxlint-tsgolint to v0.8.5 (#7433) by @renovate[bot]
- update test dependencies automatically (#7432) by @sapphi-red
- remove unused code (#7420) by @IWANABETHATGUY
- add back `just update-esbuild-diff` and add it to CI (#7404) by @sapphi-red
- deps: update oxc-resolver to 11.15.0 (#7415) by @shulaoda
- deps: update rust crate napi to v3.7.0 (#7393) by @renovate[bot]
- fix esbuild compatibility metrics calculation (#7390) by @sapphi-red
- support `tsconfig: true` in rust tests (#7389) by @sapphi-red
- hide oxc runtime in snapshots (#7388) by @sapphi-red
- deps: update oxc to v0.102.0 (#7385) by @camc314
- improve esbuild tests to download snapshots automatically (#7378) by @sapphi-red
- deps: update dependency tinybench to v6 (#7371) by @renovate[bot]
- deps: update actions/checkout action to v6 (#7370) by @renovate[bot]
- deps: update rust crates (#7367) by @renovate[bot]
- deps: update dependency oxlint to v1.32.0 (#7374) by @renovate[bot]
- deps: update dependency oxlint-tsgolint to v0.8.4 (#7373) by @renovate[bot]
- node/test-dev-server: support using custom html file (#7357) by @hyf0
- test: setup browser-based e2e test for `test-dev-server` (#7351) by @hyf0
- pin pnpm to version 10.23.0 (#7369) by @IWANABETHATGUY
- deps: update dependency rolldown-plugin-dts to v0.18.3 (#7372) by @renovate[bot]
- deps: update github-actions (#7365) by @renovate[bot]
- deps: update npm packages (#7366) by @renovate[bot]
- polish the comments about `SymbolRefFlags` (#7358) by @IWANABETHATGUY
- deps: update dependency rolldown-plugin-dts to v0.18.2 (#7355) by @renovate[bot]
- fix esbuild test generation script (#7352) by @sapphi-red
- apply cargo shear suggestion (#7347) by @IWANABETHATGUY
- deps: update oxc to v11.15.0 (#7344) by @renovate[bot]
- deps: update dependency @napi-rs/cli to v3.5.0 (#7338) by @renovate[bot]
- deps: update dependency oxlint to v1.31.0 (#7305) by @renovate[bot]
- update rollup-tests results (#7333) by @sapphi-red
- update rollup-tests Rollup version (#7332) by @sapphi-red
- add ignore config for test262 submodule (#7326) by @Copilot

### ❤️ New Contributors

* @jakeparis made their first contribution in [#7331](#7331)

Co-authored-by: shulaoda <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Feedback on Rolldown cli: For multiple define arguments, only the last one will be taken into account

3 participants