-
-
Notifications
You must be signed in to change notification settings - Fork 8k
Open
Open
Copy link
Labels
Description
Describe the bug
When a barrel file mixes own exports (import X; export const y = ...) with pure re-exports (export { z } from './z'), and multiple entries import from it, Rolldown puts the entire barrel into a shared chunk — including heavy dependencies only one entry needs. This is different to what Vite + rollup does.
Reproduction
https://github.com/dake3601/rolldown-barrel-treeshake-repro
Steps to reproduce
Run npm install followed by npm run build
System Info
System:
OS: Windows 11
Binaries:
Node: 24.13.0
npm: 11.6.2
npmPackages:
vite: ^8.0.1 => 8.0.1Used Package Manager
npm
Logs
Click to expand!
> rolldown-barrel-treeshake-repro@1.0.0 build
> npm run --workspace=app build
> app@1.0.0 build
> vite build --debug
vite:config config file loaded in 54.70ms +0ms
vite:env loading env files: [
vite:env 'C:/git/rolldown-barrel-treeshake-repro/app/.env',
vite:env 'C:/git/rolldown-barrel-treeshake-repro/app/.env.local',
vite:env 'C:/git/rolldown-barrel-treeshake-repro/app/.env.production',
vite:env 'C:/git/rolldown-barrel-treeshake-repro/app/.env.production.local'
vite:env ] +0ms
vite:env env files loaded in 0.83ms +1ms
vite:env using resolved env: {} +1ms
vite:config using resolved config: {
vite:config build: {
vite:config target: [ 'chrome111', 'edge111', 'firefox114', 'safari16.4', 'ios16.4' ],
vite:config polyfillModulePreload: true,
vite:config modulePreload: { polyfill: true },
vite:config outDir: 'dist',
vite:config assetsDir: 'assets',
vite:config assetsInlineLimit: 4096,
vite:config sourcemap: false,
vite:config terserOptions: {},
vite:config rolldownOptions: {
vite:config platform: 'browser',
vite:config input: {
vite:config main: 'src/main.js',
vite:config 'heavy-consumer': 'src/heavy-consumer.js'
vite:config }
vite:config },
vite:config commonjsOptions: { include: [ /node_modules/ ], extensions: [ '.js', '.cjs' ] },
vite:config dynamicImportVarsOptions: { exclude: [ /node_modules/ ] },
vite:config write: true,
vite:config emptyOutDir: null,
vite:config copyPublicDir: true,
vite:config license: false,
vite:config manifest: false,
vite:config lib: false,
vite:config ssrManifest: false,
vite:config ssrEmitAssets: false,
vite:config reportCompressedSize: true,
vite:config chunkSizeWarningLimit: 500,
vite:config watch: null,
vite:config cssCodeSplit: true,
vite:config minify: false,
vite:config rollupOptions: {
vite:config platform: 'browser',
vite:config input: {
vite:config main: 'src/main.js',
vite:config 'heavy-consumer': 'src/heavy-consumer.js'
vite:config }
vite:config },
vite:config ssr: false,
vite:config emitAssets: true,
vite:config createEnvironment: [Function: createEnvironment],
vite:config cssTarget: [ 'chrome111', 'edge111', 'firefox114', 'safari16.4', 'ios16.4' ],
vite:config cssMinify: false
vite:config },
vite:config worker: {
vite:config format: 'iife',
vite:config plugins: '() => plugins',
vite:config rollupOptions: {},
vite:config rolldownOptions: {}
vite:config },
vite:config optimizeDeps: {
vite:config include: [],
vite:config exclude: [],
vite:config needsInterop: [],
vite:config rolldownOptions: { resolve: { symlinks: true }, output: { topLevelVar: true } },
vite:config extensions: [],
vite:config disabled: undefined,
vite:config holdUntilCrawlEnd: true,
vite:config force: false,
vite:config ignoreOutdatedRequests: false,
vite:config noDiscovery: false,
vite:config rollupOptions: [Getter/Setter],
vite:config esbuildOptions: { preserveSymlinks: false }
vite:config },
vite:config environments: {
vite:config client: {
vite:config define: undefined,
vite:config resolve: {
vite:config externalConditions: [ 'node', 'module-sync' ],
vite:config extensions: [
vite:config '.mjs', '.js',
vite:config '.mts', '.ts',
vite:config '.jsx', '.tsx',
vite:config '.json'
vite:config ],
vite:config dedupe: [],
vite:config noExternal: [],
vite:config external: [],
vite:config preserveSymlinks: false,
vite:config tsconfigPaths: false,
vite:config alias: [
vite:config {
vite:config find: /^\/?@vite\/env/,
vite:config replacement: '/@fs/C:/git/rolldown-barrel-treeshake-repro/node_modules/vite/dist/client/env.mjs'
vite:config },
vite:config {
vite:config find: /^\/?@vite\/client/,
vite:config replacement: '/@fs/C:/git/rolldown-barrel-treeshake-repro/node_modules/vite/dist/client/client.mjs'
vite:config }
vite:config ],
vite:config mainFields: [ 'browser', 'module', 'jsnext:main', 'jsnext' ],
vite:config conditions: [ 'module', 'browser', 'development|production' ],
vite:config builtins: []
vite:config },
vite:config keepProcessEnv: false,
vite:config consumer: 'client',
vite:config optimizeDeps: {
vite:config include: [],
vite:config exclude: [],
vite:config needsInterop: [],
vite:config rolldownOptions: { resolve: { symlinks: true }, output: { topLevelVar: true } },
vite:config extensions: [],
vite:config disabled: undefined,
vite:config holdUntilCrawlEnd: true,
vite:config force: false,
vite:config ignoreOutdatedRequests: false,
vite:config noDiscovery: false,
vite:config rollupOptions: [Getter/Setter],
vite:config esbuildOptions: { preserveSymlinks: false }
vite:config },
vite:config dev: {
vite:config warmup: [],
vite:config sourcemap: { js: true },
vite:config sourcemapIgnoreList: [Function: isInNodeModules],
vite:config preTransformRequests: true,
vite:config createEnvironment: [Function: defaultCreateClientDevEnvironment],
vite:config recoverable: true,
vite:config moduleRunnerTransform: false
vite:config },
vite:config build: {
vite:config target: [
vite:config 'chrome111',
vite:config 'edge111',
vite:config 'firefox114',
vite:config 'safari16.4',
vite:config 'ios16.4'
vite:config ],
vite:config polyfillModulePreload: true,
vite:config modulePreload: { polyfill: true },
vite:config outDir: 'dist',
vite:config assetsDir: 'assets',
vite:config assetsInlineLimit: 4096,
vite:config sourcemap: false,
vite:config terserOptions: {},
vite:config rolldownOptions: {
vite:config platform: 'browser',
vite:config input: {
vite:config main: 'src/main.js',
vite:config 'heavy-consumer': 'src/heavy-consumer.js'
vite:config }
vite:config },
vite:config commonjsOptions: { include: [ /node_modules/ ], extensions: [ '.js', '.cjs' ] },
vite:config dynamicImportVarsOptions: { exclude: [ /node_modules/ ] },
vite:config write: true,
vite:config emptyOutDir: null,
vite:config copyPublicDir: true,
vite:config license: false,
vite:config manifest: false,
vite:config lib: false,
vite:config ssrManifest: false,
vite:config ssrEmitAssets: false,
vite:config reportCompressedSize: true,
vite:config chunkSizeWarningLimit: 500,
vite:config watch: null,
vite:config cssCodeSplit: true,
vite:config minify: false,
vite:config rollupOptions: {
vite:config platform: 'browser',
vite:config input: {
vite:config main: 'src/main.js',
vite:config 'heavy-consumer': 'src/heavy-consumer.js'
vite:config }
vite:config },
vite:config ssr: false,
vite:config emitAssets: true,
vite:config createEnvironment: [Function: createEnvironment],
vite:config cssTarget: [
vite:config 'chrome111',
vite:config 'edge111',
vite:config 'firefox114',
vite:config 'safari16.4',
vite:config 'ios16.4'
vite:config ],
vite:config cssMinify: false
vite:config },
vite:config plugins: [
vite:config {
vite:config name: 'vite:watch-package-data',
vite:config buildStart: [Function: buildStart],
vite:config buildEnd: [Function: buildEnd],
vite:config watchChange: [Function: watchChange]
vite:config },
vite:config BuiltinPlugin {
vite:config enforce: undefined,
vite:config name: 'builtin:vite-alias',
vite:config _options: {
vite:config entries: [
vite:config {
vite:config find: /^\/?@vite\/env/,
vite:config replacement: '/@fs/C:/git/rolldown-barrel-treeshake-repro/node_modules/vite/dist/client/env.mjs'
vite:config },
vite:config {
vite:config find: /^\/?@vite\/client/,
vite:config replacement: '/@fs/C:/git/rolldown-barrel-treeshake-repro/node_modules/vite/dist/client/client.mjs'
vite:config }
vite:config ]
vite:config }
vite:config },
vite:config BuiltinPlugin {
vite:config enforce: undefined,
vite:config name: 'builtin:vite-module-preload-polyfill',
vite:config _options: { isServer: false }
vite:config },
vite:config {
vite:config name: 'vite:resolve-builtin:get-environment',
vite:config buildStart: [Function: buildStart],
vite:config perEnvironmentStartEndDuringDev: true
vite:config },
vite:config BuiltinPlugin {
vite:config enforce: undefined,
vite:config name: 'builtin:vite-resolve',
vite:config _options: {
vite:config resolveOptions: {
vite:config isBuild: true,
vite:config isProduction: true,
vite:config asSrc: true,
vite:config preferRelative: false,
vite:config isRequire: undefined,
vite:config root: 'C:/git/rolldown-barrel-treeshake-repro/app',
vite:config scan: false,
vite:config mainFields: [ 'browser', 'module', 'jsnext:main', 'jsnext', 'main' ],
vite:config conditions: [ 'module', 'browser', 'development|production' ],
vite:config externalConditions: [ 'node', 'module-sync' ],
vite:config extensions: [
vite:config '.mjs', '.js',
vite:config '.mts', '.ts',
vite:config '.jsx', '.tsx',
vite:config '.json'
vite:config ],
vite:config tryIndex: true,
vite:config tryPrefix: undefined,
vite:config preserveSymlinks: false,
vite:config tsconfigPaths: false
vite:config },
vite:config environmentConsumer: 'client',
vite:config environmentName: 'client',
vite:config builtins: [],
vite:config external: [],
vite:config noExternal: [],
vite:config dedupe: [],
vite:config disableCache: false,
vite:config legacyInconsistentCjsInterop: undefined,
vite:config finalizeBareSpecifier: undefined,
vite:config finalizeOtherSpecifiers: undefined,
vite:config resolveSubpathImports: [Function: resolveSubpathImports],
vite:config yarnPnp: false
vite:config },
vite:config load: [AsyncFunction (anonymous)],
vite:config resolveId: [AsyncFunction (anonymous)],
vite:config transform: [AsyncFunction (anonymous)],
vite:config watchChange: [AsyncFunction (anonymous)],
vite:config perEnvironmentWatchChangeDuringDev: true
vite:config },
vite:config {
vite:config name: 'vite:html-inline-proxy',
vite:config resolveId: {
vite:config filter: { id: /[?&]html-proxy\b/ },
vite:config handler: [Function: handler]
vite:config },
vite:config load: {
vite:config filter: { id: /[?&]html-proxy\b/ },
vite:config handler: [Function: handler]
vite:config }
vite:config },
vite:config {
vite:config name: 'vite:css',
vite:config buildStart: [Function: buildStart],
vite:config buildEnd: [Function: buildEnd],
vite:config load: {
vite:config filter: {
vite:config id: /\.(css|less|sass|scss|styl|stylus|pcss|postcss|sss)(?:$|\?)/
vite:config },
vite:config handler: [AsyncFunction: handler]
vite:config },
vite:config transform: {
vite:config filter: {
vite:config id: {
vite:config include: /\.(css|less|sass|scss|styl|stylus|pcss|postcss|sss)(?:$|\?)/,
vite:config exclude: [
vite:config /[?&]commonjs-proxy/,
vite:config /[?&](?:worker|sharedworker|raw|url)\b/
vite:config ]
vite:config }
vite:config },
vite:config handler: [AsyncFunction: handler]
vite:config }
vite:config },
vite:config BuiltinPlugin {
vite:config enforce: undefined,
vite:config name: 'builtin:vite-transform',
vite:config _options: {
vite:config root: 'C:/git/rolldown-barrel-treeshake-repro/app',
vite:config include: [ /\.(m?ts|[jt]sx)$/ ],
vite:config exclude: [ /\.js$/ ],
vite:config jsxRefreshInclude: undefined,
vite:config jsxRefreshExclude: undefined,
vite:config isServerConsumer: false,
vite:config jsxInject: undefined,
vite:config transformOptions: { jsx: { development: false }, sourcemap: true },
vite:config yarnPnp: false
vite:config }
vite:config },
vite:config BuiltinPlugin {
vite:config enforce: undefined,
vite:config name: 'builtin:vite-json',
vite:config _options: { namedExports: true, stringify: 'auto', minify: true },
vite:config load: [AsyncFunction (anonymous)],
vite:config resolveId: [AsyncFunction (anonymous)],
vite:config transform: [AsyncFunction (anonymous)],
vite:config watchChange: [AsyncFunction (anonymous)]
vite:config },
vite:config {
vite:config name: 'vite:wasm-helper',
vite:config resolveId: {
vite:config filter: { id: /^vite\/wasm\-helper\.js$/ },
vite:config handler: [Function: handler]
vite:config },
vite:config load: {
vite:config filter: {
vite:config id: [
vite:config /^vite\/wasm\-helper\.js$/,
vite:config /(?<![?#].*)\.wasm\?init/
vite:config ]
vite:config },
vite:config handler: [AsyncFunction: handler]
vite:config },
vite:config renderChunk: undefined
vite:config },
vite:config {
vite:config name: 'vite:worker',
vite:config buildStart: [Function: buildStart],
vite:config load: {
vite:config filter: { id: /(?:\?|&)(worker|sharedworker)(?:&|$)/ },
vite:config handler: [AsyncFunction: handler]
vite:config },
vite:config transform: {
vite:config filter: { id: /(?:\?|&)worker_file&type=(\w+)(?:&|$)/ },
vite:config handler: [AsyncFunction: handler]
vite:config },
vite:config renderChunk: [Function: renderChunk],
vite:config generateBundle: [Function: generateBundle],
vite:config watchChange: [Function: watchChange]
vite:config },
vite:config {
vite:config name: 'vite:asset',
vite:config perEnvironmentStartEndDuringDev: true,
vite:config buildStart: [Function: buildStart],
vite:config resolveId: {
vite:config filter: {
vite:config id: [
vite:config /(\?|&)url(?:&|$)/,
vite:config /\.(apng|bmp|png|jpe?g|jfif|pjpeg|pjp|gif|svg|ico|webp|avif|cur|jxl|mp4|webm|ogg|mp3|wav|flac|aac|opus|mov|m4a|vtt|woff2?|eot|ttf|otf|webmanifest|pdf|txt)(\?.*)?$/i
vite:config ]
vite:config },
vite:config handler: [Function: handler]
vite:config },
vite:config load: {
vite:config filter: {
vite:config id: {
vite:config include: [
vite:config /(\?|&)raw(?:&|$)/,
vite:config /(\?|&)url(?:&|$)/,
vite:config /\.(apng|bmp|png|jpe?g|jfif|pjpeg|pjp|gif|svg|ico|webp|avif|cur|jxl|mp4|webm|ogg|mp3|wav|flac|aac|opus|mov|m4a|vtt|woff2?|eot|ttf|otf|webmanifest|pdf|txt)(\?.*)?$/i
vite:config ],
vite:config exclude: /^\0/
vite:config }
vite:config },
vite:config handler: [AsyncFunction: handler]
vite:config },
vite:config renderChunk: [Function: renderChunk],
vite:config generateBundle: [Function: generateBundle],
vite:config watchChange: [Function: watchChange]
vite:config },
vite:config BuiltinPlugin {
vite:config enforce: undefined,
vite:config name: 'builtin:vite-wasm-fallback',
vite:config _options: undefined,
vite:config load: [AsyncFunction (anonymous)],
vite:config resolveId: [AsyncFunction (anonymous)],
vite:config transform: [AsyncFunction (anonymous)],
vite:config watchChange: [AsyncFunction (anonymous)]
vite:config },
vite:config { name: 'vite:define', options: [Function: options] },
vite:config {
vite:config name: 'vite:css-post',
vite:config renderStart: [Function: renderStart],
vite:config transform: {
vite:config filter: {
vite:config id: {
vite:config include: /\.(css|less|sass|scss|styl|stylus|pcss|postcss|sss)(?:$|\?)/,
vite:config exclude: [
vite:config /[?&]commonjs-proxy/,
vite:config /[?&](?:worker|sharedworker|raw|url)\b/
vite:config ]
vite:config }
vite:config },
vite:config handler: [AsyncFunction: handler]
vite:config },
vite:config renderChunk: [AsyncFunction: renderChunk],
vite:config augmentChunkHash: [Function: augmentChunkHash],
vite:config generateBundle: [AsyncFunction: generateBundle]
vite:config },
vite:config {
vite:config name: 'vite:build-html',
vite:config transform: {
vite:config filter: { id: /\.html$/ },
vite:config handler: [AsyncFunction: handler]
vite:config },
vite:config generateBundle: [AsyncFunction: generateBundle]
vite:config },
vite:config {
vite:config name: 'vite:worker-import-meta-url',
vite:config applyToEnvironment: [Function: applyToEnvironment],
vite:config transform: {
vite:config filter: {
vite:config code: /\bnew\s+(?:Worker|SharedWorker)\s*\(\s*(new\s+URL\s*\(\s*('[^']+'|"[^"]+"|`[^`]+`)\s*,\s*import\.meta\.url\s*(?:,\s*)?\))/dg
vite:config },
vite:config handler: [AsyncFunction: handler]
vite:config }
vite:config },
vite:config {
vite:config name: 'vite:asset-import-meta-url',
vite:config applyToEnvironment: [Function: applyToEnvironment],
vite:config transform: {
vite:config filter: {
vite:config id: {
vite:config exclude: [
vite:config /^vite\/preload\-helper\.js$/,
vite:config /^C:\\git\\rolldown\-barrel\-treeshake\-repro\\node_modules\\vite\\dist\\client\\client\.mjs$/
vite:config ]
vite:config },
vite:config code: /\bnew\s+URL\s*\(\s*('[^']+'|"[^"]+"|`[^`]+`)\s*,\s*import\.meta\.url\s*(?:,\s*)?\)/dg
vite:config },
vite:config handler: [AsyncFunction: handler]
vite:config }
vite:config },
vite:config {
vite:config name: 'vite:prepare-out-dir',
vite:config options: [Function: options],
vite:config renderStart: { order: 'pre', handler: [Function: handler] }
vite:config },
vite:config BuiltinPlugin {
vite:config enforce: undefined,
vite:config name: 'builtin:vite-dynamic-import-vars',
vite:config _options: {
vite:config include: undefined,
vite:config exclude: [ /node_modules/ ],
vite:config resolver: [Function: resolver],
vite:config sourcemap: false
vite:config }
vite:config },
vite:config BuiltinPlugin {
vite:config enforce: undefined,
vite:config name: 'builtin:vite-import-glob',
vite:config _options: {
vite:config root: 'C:/git/rolldown-barrel-treeshake-repro/app',
vite:config sourcemap: false,
vite:config restoreQueryExtension: false
vite:config }
vite:config },
vite:config {
vite:config name: 'vite:build-import-analysis',
vite:config renderChunk: [Function: renderChunk],
vite:config generateBundle: [AsyncFunction: generateBundle]
vite:config },
vite:config BuiltinPlugin {
vite:config enforce: undefined,
vite:config name: 'builtin:vite-build-import-analysis',
vite:config _options: {
vite:config preloadCode: `const scriptRel = 'modulepreload';const assetsURL = function(dep) { return "/"+dep };const seen = {};export const __vitePreload = function preload(baseModule, deps, importerUrl) {\n` +
vite:config '\tlet promise = Promise.resolve();\n' +
vite:config '\tif (__VITE_IS_MODERN__ && deps && deps.length > 0) {\n' +
vite:config '\t\tconst links = document.getElementsByTagName("link");\n' +
vite:config '\t\tconst cspNonceMeta = document.querySelector("meta[property=csp-nonce]");\n' +
vite:config '\t\tconst cspNonce = cspNonceMeta?.nonce || cspNonceMeta?.getAttribute("nonce");\n' +
vite:config '\t\tfunction allSettled(promises) {\n' +
vite:config '\t\t\treturn Promise.all(promises.map((p) => Promise.resolve(p).then((value) => ({\n' +
vite:config '\t\t\t\tstatus: "fulfilled",\n' +
vite:config '\t\t\t\tvalue\n' +
vite:config '\t\t\t}), (reason) => ({\n' +
vite:config '\t\t\t\tstatus: "rejected",\n' +
vite:config '\t\t\t\treason\n' +
vite:config '\t\t\t}))));\n' +
vite:config '\t\t}\n' +
vite:config '\t\tpromise = allSettled(deps.map((dep) => {\n' +
vite:config '\t\t\tdep = assetsURL(dep, importerUrl);\n' +
vite:config '\t\t\tif (dep in seen) return;\n' +
vite:config '\t\t\tseen[dep] = true;\n' +
vite:config '\t\t\tconst isCss = dep.endsWith(".css");\n' +
vite:config '\t\t\tconst cssSelector = isCss ? "[rel=\\"stylesheet\\"]" : "";\n' +
vite:config '\t\t\tif (!!importerUrl) for (let i = links.length - 1; i >= 0; i--) {\n' +
vite:config '\t\t\t\tconst link = links[i];\n' +
vite:config '\t\t\t\tif (link.href === dep && (!isCss || link.rel === "stylesheet")) return;\n' +
vite:config '\t\t\t}\n' +
vite:config '\t\t\telse if (document.querySelector(`link[href="${dep}"]${cssSelector}`)) return;\n' +
vite:config '\t\t\tconst link = document.createElement("link");\n' +
vite:config '\t\t\tlink.rel = isCss ? "stylesheet" : scriptRel;\n' +
vite:config '\t\t\tif (!isCss) link.as = "script";\n' +
vite:config '\t\t\tlink.crossOrigin = "";\n' +
vite:config '\t\t\tlink.href = dep;\n' +
vite:config '\t\t\tif (cspNonce) link.setAttribute("nonce", cspNonce);\n' +
vite:config '\t\t\tdocument.head.appendChild(link);\n' +
vite:config '\t\t\tif (isCss) return new Promise((res, rej) => {\n' +
vite:config '\t\t\t\tlink.addEventListener("load", res);\n' +
vite:config '\t\t\t\tlink.addEventListener("error", () => rej(/* @__PURE__ */ new Error(`Unable to preload CSS for ${dep}`)));\n' +
vite:config '\t\t\t});\n' +
vite:config '\t\t}));\n' +
vite:config '\t}\n' +
vite:config '\tfunction handlePreloadError(err) {\n' +
vite:config '\t\tconst e = new Event("vite:preloadError", { cancelable: true });\n' +
vite:config '\t\te.payload = err;\n' +
vite:config '\t\twindow.dispatchEvent(e);\n' +
vite:config '\t\tif (!e.defaultPrevented) throw err;\n' +
vite:config '\t}\n' +
vite:config '\treturn promise.then((res) => {\n' +
vite:config '\t\tfor (const item of res || []) {\n' +
vite:config '\t\t\tif (item.status !== "rejected") continue;\n' +
vite:config '\t\t\thandlePreloadError(item.reason);\n' +
vite:config '\t\t}\n' +
vite:config '\t\treturn baseModule().catch(handlePreloadError);\n' +
vite:config '\t});\n' +
vite:config '}',
vite:config insertPreload: true,
vite:config optimizeModulePreloadRelativePaths: false,
vite:config renderBuiltUrl: false,
vite:config isRelativeBase: false
vite:config }
vite:config },
vite:config {
vite:config name: 'vite:license',
vite:config generateBundle: [AsyncFunction: generateBundle]
vite:config },
vite:config BuiltinPlugin {
vite:config enforce: undefined,
vite:config name: 'builtin:vite-reporter',
vite:config _options: {
vite:config root: 'C:/git/rolldown-barrel-treeshake-repro/app',
vite:config isTty: true,
vite:config isLib: false,
vite:config assetsDir: 'assets\\',
vite:config chunkLimit: 500,
vite:config logInfo: [Function (anonymous)],
vite:config reportCompressedSize: true,
vite:config warnLargeChunks: false
vite:config }
vite:config },
vite:config BuiltinPlugin {
vite:config enforce: undefined,
vite:config name: 'builtin:vite-load-fallback',
vite:config _options: undefined
vite:config }
vite:config ],
vite:config optimizeDepsPluginNames: []
vite:config }
vite:config },
vite:config resolve: {
vite:config externalConditions: [ 'node', 'module-sync' ],
vite:config extensions: [
vite:config '.mjs', '.js',
vite:config '.mts', '.ts',
vite:config '.jsx', '.tsx',
vite:config '.json'
vite:config ],
vite:config dedupe: [],
vite:config noExternal: [],
vite:config external: [],
vite:config preserveSymlinks: false,
vite:config tsconfigPaths: false,
vite:config alias: [
vite:config {
vite:config find: /^\/?@vite\/env/,
vite:config replacement: '/@fs/C:/git/rolldown-barrel-treeshake-repro/node_modules/vite/dist/client/env.mjs'
vite:config },
vite:config {
vite:config find: /^\/?@vite\/client/,
vite:config replacement: '/@fs/C:/git/rolldown-barrel-treeshake-repro/node_modules/vite/dist/client/client.mjs'
vite:config }
vite:config ],
vite:config mainFields: [ 'browser', 'module', 'jsnext:main', 'jsnext' ],
vite:config conditions: [ 'module', 'browser', 'development|production' ],
vite:config builtins: []
vite:config },
vite:config configFile: 'C:/git/rolldown-barrel-treeshake-repro/app/vite.config.js',
vite:config configFileDependencies: [ 'C:/git/rolldown-barrel-treeshake-repro/app/vite.config.js' ],
vite:config inlineConfig: {
vite:config root: undefined,
vite:config base: undefined,
vite:config mode: undefined,
vite:config configFile: undefined,
vite:config configLoader: undefined,
vite:config logLevel: undefined,
vite:config clearScreen: undefined,
vite:config build: { rolldownOptions: undefined, rollupOptions: [Getter/Setter] },
vite:config worker: { rolldownOptions: undefined, rollupOptions: [Getter/Setter] },
vite:config optimizeDeps: { rolldownOptions: undefined, rollupOptions: [Getter/Setter] }
vite:config },
vite:config root: 'C:/git/rolldown-barrel-treeshake-repro/app',
vite:config base: '/',
vite:config decodedBase: '/',
vite:config rawBase: '/',
vite:config publicDir: 'C:/git/rolldown-barrel-treeshake-repro/app/public',
vite:config cacheDir: 'C:/git/rolldown-barrel-treeshake-repro/app/node_modules/.vite',
vite:config command: 'build',
vite:config mode: 'production',
vite:config isBundled: true,
vite:config isWorker: false,
vite:config mainConfig: null,
vite:config bundleChain: [],
vite:config isProduction: true,
vite:config plugins: [
vite:config 'vite:watch-package-data',
vite:config 'builtin:vite-alias',
vite:config 'native:modulepreload-polyfill',
vite:config 'vite:resolve-builtin:get-environment',
vite:config 'vite:resolve-builtin',
vite:config 'vite:html-inline-proxy',
vite:config 'vite:css',
vite:config 'native:transform',
vite:config 'builtin:vite-json',
vite:config 'vite:wasm-helper',
vite:config 'vite:worker',
vite:config 'vite:asset',
vite:config 'builtin:vite-wasm-fallback',
vite:config 'vite:define',
vite:config 'vite:css-post',
vite:config 'vite:build-html',
vite:config 'vite:worker-import-meta-url',
vite:config 'vite:asset-import-meta-url',
vite:config 'vite:prepare-out-dir',
vite:config 'vite:rollup-options-plugins',
vite:config 'native:dynamic-import-vars',
vite:config 'builtin:vite-import-glob',
vite:config 'vite:build-import-analysis',
vite:config 'native:import-analysis-build',
vite:config 'vite:terser',
vite:config 'vite:license',
vite:config 'native:manifest',
vite:config 'vite:ssr-manifest',
vite:config 'native:reporter',
vite:config 'builtin:vite-load-fallback'
vite:config ],
vite:config css: {
vite:config transformer: 'postcss',
vite:config preprocessorMaxWorkers: true,
vite:config devSourcemap: false
vite:config },
vite:config json: { namedExports: true, stringify: 'auto' },
vite:config esbuild: { jsxDev: false, charset: 'utf8', legalComments: 'none' },
vite:config oxc: { jsx: { development: false } },
vite:config server: {
vite:config port: 5173,
vite:config strictPort: false,
vite:config host: undefined,
vite:config allowedHosts: [],
vite:config https: undefined,
vite:config open: false,
vite:config proxy: undefined,
vite:config cors: {
vite:config origin: /^https?:\/\/(?:(?:[^:]+\.)?localhost|127\.0\.0\.1|\[::1\])(?::\d+)?$/
vite:config },
vite:config headers: {},
vite:config warmup: { clientFiles: [], ssrFiles: [] },
vite:config middlewareMode: false,
vite:config fs: {
vite:config strict: true,
vite:config deny: [ '.env', '.env.*', '*.{crt,pem}', '**/.git/**' ],
vite:config allow: [ 'C:/git/rolldown-barrel-treeshake-repro' ]
vite:config },
vite:config preTransformRequests: true,
vite:config perEnvironmentStartEndDuringDev: false,
vite:config perEnvironmentWatchChangeDuringDev: false,
vite:config forwardConsole: { enabled: false, unhandledErrors: false, logLevels: [] },
vite:config sourcemapIgnoreList: [Function: isInNodeModules]
vite:config },
vite:config builder: undefined,
vite:config preview: {
vite:config port: 4173,
vite:config strictPort: false,
vite:config host: undefined,
vite:config allowedHosts: [],
vite:config https: undefined,
vite:config open: false,
vite:config proxy: undefined,
vite:config cors: {
vite:config origin: /^https?:\/\/(?:(?:[^:]+\.)?localhost|127\.0\.0\.1|\[::1\])(?::\d+)?$/
vite:config },
vite:config headers: {}
vite:config },
vite:config envDir: 'C:/git/rolldown-barrel-treeshake-repro/app',
vite:config env: { BASE_URL: '/', MODE: 'production', DEV: false, PROD: true },
vite:config assetsInclude: [Function: assetsInclude],
vite:config rawAssetsInclude: [],
vite:config logger: {
vite:config hasWarned: false,
vite:config info: [Function: info],
vite:config warn: [Function: warn],
vite:config warnOnce: [Function: warnOnce],
vite:config error: [Function: error],
vite:config clearScreen: [Function: clearScreen],
vite:config hasErrorLogged: [Function: hasErrorLogged]
vite:config },
vite:config packageCache: Map(1) {
vite:config 'fnpd_C:/git/rolldown-barrel-treeshake-repro/app' => {
vite:config dir: 'C:/git/rolldown-barrel-treeshake-repro/app',
vite:config data: {
vite:config name: 'app',
vite:config version: '1.0.0',
vite:config type: 'module',
vite:config scripts: {
vite:config build: 'vite build --debug',
vite:config 'build:fixed': 'vite build --config vite.config.fixed.js',
vite:config check: 'node check-output.js'
vite:config },
vite:config dependencies: { 'my-lib': '1.0.0' },
vite:config devDependencies: { vite: '^8.0.1' }
vite:config },
vite:config hasSideEffects: [Function: hasSideEffects],
vite:config setResolvedCache: [Function: setResolvedCache],
vite:config getResolvedCache: [Function: getResolvedCache]
vite:config },
vite:config set: [Function (anonymous)]
vite:config },
vite:config appType: 'spa',
vite:config experimental: {
vite:config importGlobRestoreExtension: false,
vite:config renderBuiltUrl: undefined,
vite:config hmrPartialAccept: false,
vite:config bundledDev: false
vite:config },
vite:config future: undefined,
vite:config ssr: {
vite:config target: 'node',
vite:config optimizeDeps: { esbuildOptions: { preserveSymlinks: false } },
vite:config resolve: { conditions: undefined, externalConditions: undefined }
vite:config },
vite:config dev: {
vite:config warmup: [],
vite:config sourcemap: { js: true },
vite:config sourcemapIgnoreList: [Function: isInNodeModules],
vite:config preTransformRequests: false,
vite:config createEnvironment: [Function: defaultCreateDevEnvironment],
vite:config recoverable: false,
vite:config moduleRunnerTransform: false
vite:config },
vite:config devtools: { config: { host: 'localhost' }, enabled: false },
vite:config webSocketToken: 'qXIGgiEawmwp',
vite:config getSortedPlugins: [Function: getSortedPlugins],
vite:config getSortedPluginHooks: [Function: getSortedPluginHooks],
vite:config createResolver: [Function: createResolver],
vite:config fsDenyGlob: [Function: arrayMatcher],
vite:config safeModulePaths: Set(0) {},
vite:config Symbol(vite:resolved-config): true
vite:config } +40ms
vite v8.0.1 building client environment for production...
✓ 6 modules transformed.
computing gzip size...
dist/assets/heavy-consumer-DDXquPRD.js 0.15 kB │ gzip: 0.14 kB
dist/assets/main-BazsL_Cs.js 0.21 kB │ gzip: 0.18 kB
dist/assets/src-Dugf9esm.js 0.93 kB │ gzip: 0.50 kB
✓ built in 51msValidations
- Follow our Code of Conduct
- Read the Contributing Guidelines.
- Read the docs.
- Check that there isn't already an issue that reports the same bug to avoid creating a duplicate.
- Make sure this is a Vite issue and not a framework-specific issue. For example, if it's a Vue SFC related bug, it should likely be reported to vuejs/core instead.
- Check that this is a concrete bug. For Q&A open a GitHub Discussion or join our Discord Chat Server.
- The provided reproduction is a minimal reproducible example of the bug.
Reactions are currently unavailable