Zheng Feng ddd9aec558
fix(frontend): default to Webpack over Turbopack in dev to avoid PostCSS worker leak on macOS (#5133)
* fix(frontend): default to Webpack over Turbopack in dev to avoid PostCSS worker leak on macOS

On macOS arm64, Turbopack + Next.js 16.2.11 + Tailwind CSS v4 causes an
unbounded spawn of PostCSS evaluator processes that consume high CPU and
memory and never return a response. Webpack is unaffected.

Change the no-override default in getDevBundler() from platform-dependent
Turbopack (all non-Windows) to Webpack. DEER_FLOW_DEV_BUNDLER=turbo
continues to work as an explicit opt-in for local diagnosis.

Fixes #5132

* docs(frontend): address webpack default review feedback

* docs(frontend): clarify webpack default rationale
2026-09-01 22:56:23 +08:00

38 lines
1.2 KiB
TypeScript

import { describe, expect, test } from "@rstest/core";
import { getDevBundler, getNextDevArgs } from "../../../scripts/dev.mjs";
describe("frontend dev launcher", () => {
test("allows an explicit bundler override on every platform", () => {
expect(getDevBundler("win32", { DEER_FLOW_DEV_BUNDLER: "turbo" })).toBe(
"turbo",
);
expect(
getNextDevArgs("linux", [], { DEER_FLOW_DEV_BUNDLER: "webpack" }),
).toEqual(["dev", "--webpack"]);
});
test("rejects an unsupported bundler override", () => {
expect(() =>
getDevBundler("linux", { DEER_FLOW_DEV_BUNDLER: "invalid" }),
).toThrow('DEER_FLOW_DEV_BUNDLER must be either "turbo" or "webpack"');
});
test("passes through extra Next.js arguments", () => {
expect(getNextDevArgs("win32", ["--", "--port", "3302"])).toEqual([
"dev",
"--webpack",
"--port",
"3302",
]);
});
test("uses webpack by default on every platform", () => {
expect(getDevBundler("win32")).toBe("webpack");
expect(getDevBundler("linux")).toBe("webpack");
expect(getDevBundler("darwin")).toBe("webpack");
expect(getNextDevArgs("win32")).toEqual(["dev", "--webpack"]);
expect(getNextDevArgs("linux")).toEqual(["dev", "--webpack"]);
});
});