Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

Rolldown "Run build with devtools" produces a development build (inherits the dev server's NODE_ENV)

オープン 初心者向け
#586 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
2/5
見積もり時間
1〜3時間
初心者へのやさしさ
84/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
node.js, typescript, vite

調査の方向性

packages/rolldown/src/node/rolldown/build-runner.ts、特に getBuildCommand() とそこからの ctx.terminals.startChildProcess() の呼び出しから始め、実行中の Vite dev server で問題を再現し、生成された 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:

  1. The dev server sets process.env.NODE_ENV = 'development' at startup when it is unset (vite resolveConfig, isNodeEnvSet / defaultNodeEnv).
  2. getBuildCommand() spawns vite build through ctx.terminals.startChildProcess() with env: { VITE_DEVTOOLS_ROLLDOWN: 'true' } (build-runner.ts#L41-L48). The hub merges that onto the dev server's process.env, so the child inherits NODE_ENV=development.
  3. vite build keeps an already-set NODE_ENV (documented: NODE_ENV=development vite build is how you ask for a development build), and replaces process.env.NODE_ENV in library code with process.env.NODE_ENV || mode. So every if (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.

  1. Any Vite 8 app with @vitejs/devtools + @vitejs/devtools-rolldown 0.7.5 and a dependency that has process.env.NODE_ENV branches (e.g. Vue + Pinia).
  2. vite (dev), open DevTools → Rolldown → Run build with devtools.
  3. Compare the new session's first-load size and the dist/ output with a plain vite build from a fresh shell: the button's build is larger and contains dev-only code (for Vue, __VUE_DEVTOOLS_GLOBAL_HOOK__ strings appear in dist/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時間
マージ済み PR(30日)
21

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

vitejs/devtools のほかの issue

vitejs/devtools の issue をすべて見る

似ている issue

TypeScript の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。