Rolldown "Run build with devtools" produces a development build (inherits the dev server's NODE_ENV)
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
- 难度
- 2/5
- 预计耗时
- 1-3 小时
- 新手友好度
- 84/100
- Issue 类型
- 缺陷
- 描述清晰度
- 描述清楚
- 活跃度
- 活跃
- 技术栈
- node.js, typescript, vite
- 领域
- build-system, devtools
调研方向
从 packages/rolldown/src/node/rolldown/build-runner.ts 开始,重点查看 getBuildCommand() 及其对 ctx.terminals.startChildProcess() 的调用,然后在运行中的 Vite 开发服务器上重现该问题,并将生成的 bundle 与普通的 vite build 进行比较。当 Run build with devtools 使用 production NODE_ENV、确认命令反映该环境,并且 Rolldown 分析与普通 production build 一致时,即视为完成。
由索引模型根据 Issue 内容生成。
描述
Describe the bug
The Rolldown panel's Run build with devtools button (vite:rolldown:run-build) produces a development bundle, not a production one. Every size, chunk and duplicate-package figure the Rolldown panel then shows for that session describes the wrong build.
In our Vue app, the button's build ships 259.2 KB gz of first-load JS, while a plain vite build of the same commit ships 200.9 KB gz. The button's build keeps Vue's dev warnings, Pinia's devtools plugin and @vue/devtools-kit in the first-load chunk. The build log still prints building client environment for production, so nothing looks wrong from the outside.
Mechanism:
- The dev server sets
process.env.NODE_ENV = 'development'at startup when it is unset (viteresolveConfig,isNodeEnvSet/defaultNodeEnv). getBuildCommand()spawnsvite buildthroughctx.terminals.startChildProcess()withenv: { VITE_DEVTOOLS_ROLLDOWN: 'true' }(build-runner.ts#L41-L48). The hub merges that onto the dev server'sprocess.env, so the child inheritsNODE_ENV=development.vite buildkeeps an already-setNODE_ENV(documented:NODE_ENV=development vite buildis how you ask for a development build), and replacesprocess.env.NODE_ENVin library code withprocess.env.NODE_ENV || mode. So everyif (process.env.NODE_ENV !== 'production')branch stays in the bundle.
Passing the parent env through in startChildProcess() seems right in general (PATH, proxies, the user's own variables), so the fix probably belongs here: the build runner should set NODE_ENV: 'production', which is what a plain vite build resolves to. The confirmation dialog would then also show the real command line: NODE_ENV=production VITE_DEVTOOLS_ROLLDOWN=true vite build.
Reproduction
Inline steps below; the key part needs a running Vite dev server with DevTools.
- Any Vite 8 app with
@vitejs/devtools+@vitejs/devtools-rolldown0.7.5 and a dependency that hasprocess.env.NODE_ENVbranches (e.g. Vue + Pinia). vite(dev), open DevTools → Rolldown → Run build with devtools.- Compare the new session's first-load size and the
dist/output with a plainvite buildfrom a fresh shell: the button's build is larger and contains dev-only code (for Vue,__VUE_DEVTOOLS_GLOBAL_HOOK__strings appear indist/assets/*.js).
The Vite behaviour alone, without DevTools (Vite 8.3.0):
# index.html: <script type="module" src="./main.js"></script>
# main.js:
# if (process.env.NODE_ENV !== 'production') console.log('DEV-ONLY-BRANCH')
# console.log('app')
vite build --outDir clean # what a user runs
NODE_ENV=development vite build --outDir inherited # what the button's child effectively runs
grep -l DEV-ONLY-BRANCH clean/assets/*.js # no match: dev branch removed
grep -l DEV-ONLY-BRANCH inherited/assets/*.js # match: dev branch kept
Expected: the button's build matches a plain vite build (production NODE_ENV).
Actual: it is a development build, and the Rolldown panel analyses that.
System Info
OS: Windows 11 Pro 10.0.26200 (x64)
Node: 24.21.0
pnpm: 12.5.1
@vitejs/devtools / @vitejs/devtools-rolldown: 0.7.5 (also upstream main ad2d6df)
devframe / @devframes/hub: 1.0.0
vite: 8.3.0
Used Package Manager
pnpm
Validations
- Follow our Code of Conduct
- Read the Contributing Guide.
- Check that there isn't already an issue that reports the same bug to avoid creating a duplicate.
- Check that this is a concrete bug. For Q&A, please open a GitHub Discussion instead.
- The provided reproduction is a minimal reproducible of the bug.
- 主要语言
- TypeScript
- 星标
- 1.2k
- 派生
- 91
- 平均合并
- 1 天 3 小时
- 30 天内合并 PR
- 21
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
vitejs/devtools 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 74/100
维护者通常 1 天内回复
-
enhancement
难度 2/5 1-3 小时 新手友好度 72/100
维护者通常 1 天内回复
-
feat(oxc): add rule timing stats to the lint inspector可能已有人在做 @yuyinws 于 8 天前认领。 未关闭enhancement
vitejs/devtools#584 · 已指派 1 人 ·
维护者通常 1 天内回复
-
pending triage
难度 3/5 1-2 天 新手友好度 58/100
维护者通常 1 天内回复
-
pending triage
难度 4/5 3-5 天 新手友好度 35/100
维护者通常 1 天内回复
相似的 Issue
-
bug
难度 1/5 1 小时以内 新手友好度 88/100
StabilityNexus/Fate-EVM-Frontend#153 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 78/100
code-yeongyu/oh-my-openagent#9039 ·
维护者通常 1 天内回复
-
bug
难度 2/5 1-3 小时 新手友好度 84/100
Tencent/teamai-cli#862 ·
维护者通常 1 天内回复
-
bug good first issue hacktoberfest redis
难度 2/5 1-3 小时 新手友好度 88/100
libredb/libredb-studio#1164 ·
维护者通常 1 天内回复
-
flake
难度 2/5 1-3 小时 新手友好度 85/100
维护者通常 1 天内回复