Skip to content

[Bug]: esm export * from 'externalized-dep' generates unnecessary code #4472

@zsilbi

Description

@zsilbi

Reproduction link or steps

Reproduction: https://stackblitz.com/edit/github-qo1x947q?file=src%2Fentry.js

Overview of the files:

// rolldown.config.mjs
import { defineConfig } from 'rolldown';

export default defineConfig({
  input: ['./src/entry.js'],
  external: ['ext-index', 'ext-file', 'ext-folder'],
});
// src/folder/index.js
export * from "ext-folder";

export const folder = {};
// src/file.js
export * from "ext-file";

export const file = {};
// src/entry.js
export * from 'ext-index';

export * from './file';
export * from './folder';

export const index = {};

What is expected?

// dist/entry.js
export * from 'ext-index';
export * from "ext-file";
export * from "ext-folder";

const file = {};
const folder = {};
const index = {};

export { file, folder, index };

What is actually happening?

// dist/entry.js
export * from "ext-index"

//#region rolldown:runtime
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
	for (var name in all) __defProp(target, name, {
		get: all[name],
		enumerable: true
	});
};
var __copyProps = (to, from, except, desc) => {
	if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
		key = keys[i];
		if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
			get: ((k) => from[k]).bind(null, key),
			enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
		});
	}
	return to;
};
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));

//#endregion
//#region src/file.js
var file_exports = {};
__export(file_exports, { file: () => file });
import * as import_ext_file from "ext-file";
__reExport(file_exports, import_ext_file);
const file = {};

//#endregion
//#region src/folder/index.ts
var folder_exports = {};
__export(folder_exports, { folder: () => folder });
import * as import_ext_folder from "ext-folder";
__reExport(folder_exports, import_ext_folder);
const folder = {};

//#endregion
//#region src/entry.js
var entry_exports = {};
__export(entry_exports, {
	file: () => file,
	folder: () => folder,
	index: () => index
});
import * as import_ext_index from "ext-index";
__reExport(entry_exports, import_ext_index);
__reExport(entry_exports, file_exports);
__reExport(entry_exports, folder_exports);
const index = {};

//#endregion
export { file, folder, index };

System Info

Stackblitz: npm:@rolldown/browser@latest
Ubuntu / Node v23.9.0: 1.0.0-beta.8-commit.534fde3

Any additional comments?

This is the same issue: #1940

#1974 partially fixed the problem, so this:

// src/entry.js
export * from "ext-index";

export const index = {};

works as expected:

// dist/entry.js
export * from "ext-index"

const index = {};

export { index };

Metadata

Metadata

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions