Skip to content

Comments

fix!: this.emitFile does not respect chunkFileNames#6868

Merged
shulaoda merged 2 commits intomainfrom
copilot/fix-emit-file-chunk-names
Nov 10, 2025
Merged

fix!: this.emitFile does not respect chunkFileNames#6868
shulaoda merged 2 commits intomainfrom
copilot/fix-emit-file-chunk-names

Conversation

Copy link
Contributor

Copilot AI commented Nov 6, 2025

Chunks emitted via this.emitFile({ type: 'chunk' }) were incorrectly using entryFileNames pattern instead of chunkFileNames, placing them in the wrong output directory.

// Before: emitted chunk uses entryFileNames pattern
this.emitFile({ type: 'chunk', name: 'worker', id: './worker.js' })
// Output: dist/worker.js (wrong - should use chunkFileNames)

// After: emitted chunk correctly uses chunkFileNames pattern  
// Output: dist/chunks/worker.js (correct)

Changes

  • Added ChunkMeta::EmittedChunk flag to distinguish this.emitFile chunks from true entry points
  • Set flag during chunk creation when EntryPointKind::EmittedUserDefined is detected
  • Updated filename_template() logic to prioritize chunk_filenames for emitted chunks, while preserving entry_filenames for actual entry points

Emitted chunks now correctly respect the chunkFileNames configuration option as documented in Rollup's plugin API.

Original prompt

This section details on the original issue you should resolve

<issue_title>[Bug]: this.emitFile does not respect chunkFileNames</issue_title>
<issue_description>### Reproduction link or steps

https://stackblitz.com/edit/rolldown-rolldown-starter-stackblitz-t1qrtlke?file=rolldown.config.mjs,dist%2Ffoo.js

What is expected?

The Rollup documentation on this.emitFile states:

When emitting chunks or assets, either a name or a fileName can be supplied. ... if a name is supplied, this will be used as substitution for [name] in the corresponding output.chunkFileNames or output.assetFileNames pattern

In other words a combination of this.emitFile({ type: 'chunk', name: ..., ... }) and chunkFileNames: 'chunks/[name].js' should place the emitted file within the chunks folder.

What is actually happening?

chunkFileNames option seems to be ignored, it ends up in the root dist folder.

System Info

irrelevant

Any additional comments?

This blocks SvelteKit projects using Rolldown from using remote functions, since we make use of this.emitFile for them: sveltejs/kit#14739</issue_description>

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

@hyf0 @shulaoda cc If you got time, take a look at this one.

💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.

@graphite-app
Copy link
Contributor

graphite-app bot commented Nov 6, 2025

How to use the Graphite Merge Queue

Add the label graphite: merge to this PR to add it to the merge queue.

You must have a Graphite account in order to use the merge queue. Sign up using this link.

An organization admin has enabled the Graphite Merge Queue in this repository.

Please do not merge from GitHub as this will restart CI on PRs being processed by the merge queue.

@netlify
Copy link

netlify bot commented Nov 6, 2025

Deploy Preview for rolldown-rs ready!

Name Link
🔨 Latest commit 65751cd
🔍 Latest deploy log https://app.netlify.com/projects/rolldown-rs/deploys/6911f49466357f00080124ad
😎 Deploy Preview https://deploy-preview-6868--rolldown-rs.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

Copilot AI changed the title [WIP] Fix this.emitFile to respect chunkFileNames configuration Fix: this.emitFile with type: 'chunk' now respects chunkFileNames Nov 6, 2025
Copilot AI requested a review from shulaoda November 6, 2025 12:44
Copy link
Member

@hyf0 hyf0 left a comment

Choose a reason for hiding this comment

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

Shoulda wait for dts plugin's fix first.

@shulaoda shulaoda force-pushed the copilot/fix-emit-file-chunk-names branch from f897e6e to 6f83be3 Compare November 10, 2025 13:59
@shulaoda shulaoda changed the title Fix: this.emitFile with type: 'chunk' now respects chunkFileNames fix!: this.emitFile does not respect chunkFileNames Nov 10, 2025
@shulaoda shulaoda force-pushed the copilot/fix-emit-file-chunk-names branch 2 times, most recently from 8ff863f to b1ebb47 Compare November 10, 2025 14:02
@github-actions
Copy link
Contributor

github-actions bot commented Nov 10, 2025

Benchmarks Rust

  • target: main(ec16a8f)
  • pr: copilot/fix-emit-file-chunk-names(65751cd)
group                                                        pr                                     target
-----                                                        --                                     ------
bundle/bundle@multi-duplicated-top-level-symbol              1.00     64.2±1.06ms        ? ?/sec    1.04     66.6±2.81ms        ? ?/sec
bundle/bundle@multi-duplicated-top-level-symbol-sourcemap    1.00     70.6±1.32ms        ? ?/sec    1.01     71.2±1.56ms        ? ?/sec
bundle/bundle@rome_ts                                        1.00    108.6±2.37ms        ? ?/sec    1.01    110.1±2.68ms        ? ?/sec
bundle/bundle@rome_ts-sourcemap                              1.00    121.4±1.45ms        ? ?/sec    1.00    121.3±1.58ms        ? ?/sec
bundle/bundle@threejs                                        1.00     39.0±0.51ms        ? ?/sec    1.03     40.1±2.45ms        ? ?/sec
bundle/bundle@threejs-sourcemap                              1.00     42.7±0.48ms        ? ?/sec    1.02     43.4±0.94ms        ? ?/sec
bundle/bundle@threejs10x                                     1.01    395.1±5.33ms        ? ?/sec    1.00    391.9±4.84ms        ? ?/sec
bundle/bundle@threejs10x-sourcemap                           1.01    455.6±4.21ms        ? ?/sec    1.00    452.2±4.01ms        ? ?/sec
scan/scan@rome_ts                                            1.02     87.1±1.59ms        ? ?/sec    1.00     85.2±1.51ms        ? ?/sec
scan/scan@threejs                                            1.03     29.4±1.96ms        ? ?/sec    1.00     28.6±0.38ms        ? ?/sec
scan/scan@threejs10x                                         1.01    301.1±5.75ms        ? ?/sec    1.00    297.4±4.23ms        ? ?/sec

@shulaoda shulaoda force-pushed the copilot/fix-emit-file-chunk-names branch from b1ebb47 to 65751cd Compare November 10, 2025 14:20
@shulaoda shulaoda marked this pull request as ready for review November 10, 2025 14:32
@shulaoda shulaoda merged commit 4b59864 into main Nov 10, 2025
28 checks passed
@shulaoda shulaoda deleted the copilot/fix-emit-file-chunk-names branch November 10, 2025 14:37
shulaoda added a commit that referenced this pull request Nov 10, 2025
## [1.0.0-beta.48] - 2025-11-10

:boom: Breaking Changes

- `this.emitFile` now respects `chunkFileNames` for chunk type
```js
// rolldown.config.js
export default {
  output: {
    chunkFileNames: 'chunks/[name]-[hash].js'
  }
}

// In plugin
this.emitFile({
  type: 'chunk',
  id: './my-module.js'
});

// Before: Output might not follow chunkFileNames pattern
// After: Output follows 'chunks/[name]-[hash].js' pattern
```

- Deprecated top-level options removed
  - `define` → `transform.define`
  - `inject` → `transform.inject`
  - `dropLabels` → `transform.dropLabels`
  - `keepNames` → `output.keepNames`
  - `profilerNames` → `output.generatedCode.profilerNames`

- Stable plugins moved from experimental
```js
// Before
import { replacePlugin, esmExternalRequirePlugin } from 'rolldown/experimental';

// After
import { replacePlugin, esmExternalRequirePlugin } from 'rolldown/plugins';
```

- `RolldownBuild#scan` is removed, now only available from `rolldown/experimental`
```js
// Before: scan was a method on RolldownBuild
const build = await rolldown(config);
await build.scan();

// After: import scan from rolldown/experimental
import { scan } from 'rolldown/experimental';
await scan(config);
```

### 💥 BREAKING CHANGES

- `this.emitFile` does not respect `chunkFileNames` (#6868) by @Copilot
- remove deprecated top-level `dropLabels` option (#6915) by @sapphi-red
- remove deprecated top-level `keepNames` option (#6914) by @sapphi-red
- remove deprecated top-level `profilerNames` option (#6913) by @sapphi-red
- remove deprecated top-level `define` and `inject` options (#6912) by @sapphi-red
- move stable plugins from experimental to `rolldown/plugins` (#6303) by @shulaoda
- node: remove experimental `RolldownBuild#scan`, only expose it from `rolldown/experimental` (#6889) by @hyf0

### 🚀 Features

- add side-effect detection for global constructors with primitive arguments (#6898) by @IWANABETHATGUY
- rust: use `BundleMode` to handle incremental build exhaustively (#6894) by @hyf0
- detect side-effect-free global function calls (#6897) by @IWANABETHATGUY
- expose `parseSync` / `parseAsync` function (#6866) by @sapphi-red
- skip `__toESM` helper when only named imports are used from CJS modules (#6850) by @Copilot
- rolldown_binding: expose `htmlInlineProxyPlugin` (#6856) by @shulaoda
- rolldown_plugin_html_inline_proxy: align `load` hook logic (#6855) by @shulaoda
- rolldown_plugin_html_inline_proxy: align `resolveId` hook logic (#6854) by @shulaoda
- rolldown_plugin_html_inline_proxy: initialize (#6853) by @shulaoda

### 🐛 Bug Fixes

- cli: support nested options in CLI properly (#6911) by @sapphi-red
- debug: ensure injecting `hook_resolve_id_trigger` correctly (#6908) by @hyf0
- use chunk-specific exports for entry module export detection (#6904) by @IWANABETHATGUY
- debug: ensure build get injected and add tests (#6896) by @hyf0
- error: return friendly error for bundler already closed scenario (#6878) by @hyf0
- improve dynamic entry processing with iterative approach (#6869) by @IWANABETHATGUY
- handle tsconfig option resolve error (#6871) by @sapphi-red
- handle error when creating output chunk directories (#6870) by @sapphi-red
- node: `NormalizedOutputOptionsImpl` and `NormalizedInputOptionsImpl` enumerable (#6861) by @hyf0
- node: keys of `RolldownOutput` should be enumerable (#6852) by @Copilot

### 🚜 Refactor

- rust: rename `BundleContext` to `BundleHandle` (#6893) by @hyf0
- rust: rename `build_span` to `bundle_span` (#6892) by @hyf0
- rust: introduce `PluginDriverFactory` to manage creation of `PluginDriver` (#6891) by @hyf0
- crates/rolldown_binding: remove useless `BindingBundlerImpl` (#6888) by @hyf0
- crates/rolldown_binding: rename `Bundler` to `ClassicBundler` and clarify the purpose (#6887) by @hyf0
- rust: rename `BuildFactory/Build` to `BundleFactory/Bundle` (#6886) by @hyf0
- rust: tweak incremental build related methods of `Bundler` (#6884) by @hyf0
- rust: manage build via `BuildFactory` for `Bundler` (#6883) by @hyf0
- node: implement a new `Bundler` that satisfy the usage of `RolldownBuild` (#6877) by @hyf0
- node: remove useless `nonEnumerable` decorator (#6862) by @hyf0

### 📚 Documentation

- add documentation for native replace plugin (#6315) by @shulaoda
- in-depth/directives: expand description of how directives are handled (#6882) by @sapphi-red
- in-depth/bundling-cjs: clarify the condition of `default` export interop (#6875) by @sapphi-red
- add troubleshooting section for `this` in exported functions (#6865) by @sapphi-red
- update prebuilt binaries list based on Node 24 platform support tier (#6864) by @sapphi-red
- remove unsupported [ext] placeholder from entryFileNames and chunkFileNames (#6859) by @Copilot

### ⚡ Performance

- rolldown: improve sourcemap chain processing (#6858) by @Brooooooklyn

### 🧪 Testing

- add test case for issue #6881 with scientific notation (#6906) by @IWANABETHATGUY

### ⚙️ Miscellaneous Tasks

- deps: update npm packages (#6918) by @renovate[bot]
- deps: update dependency rolldown-plugin-dts to v0.17.5 (#6917) by @renovate[bot]
- deps: lock file maintenance (#6907) by @renovate[bot]
- deps: update rust crates (#6905) by @renovate[bot]
- deps: update npm packages (#6903) by @renovate[bot]
- deps: update github-actions (#6902) by @renovate[bot]
- deps: update `oxc_resolver` and `oxc_resolver_napi` (#6901) by @shulaoda
- deps: update dependency rolldown-plugin-dts to v0.17.4 (#6895) by @renovate[bot]
- deps: update dependency tsdown to v0.16.1 (#6885) by @renovate[bot]
- deps: upgrade napi to remove linker args that skip missing symbols (#6867) by @Boshen

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]: this.emitFile does not respect chunkFileNames

3 participants