Hoist platform-specific native packages via root optionalDependencies

Real root cause:
Tailwind v4's lightningcss is invoked from a Turbopack-bundled postcss.js at
runtime. Turbopack resolves require() against the workspace's TOP-LEVEL
node_modules, not against bun's nested .bun/ store. So even when
lightningcss-darwin-arm64 is correctly installed inside .bun/ with proper
symlinks, Turbopack can't see it — and lightningcss falls back to a sibling
'.node' file which doesn't exist, hence the runtime error.

Private-editor accidentally works because it has TWO lightningcss versions
(1.27.0 from Expo + 1.32.0 from Tailwind), which forces bun's hoisting
algorithm to put one copy at the top level. Editor-v2 has only one version,
so bun keeps it nested in .bun/ and nothing is at top-level.

Fix: declare the platform binary packages as optionalDependencies at the
WORKSPACE ROOT (not apps/editor). Root deps are always hoisted to top-level
node_modules, so Turbopack's resolver finds them. Bun still applies the
os/cpu filter at install time, so each developer only ends up with their
host's binaries on disk.

Verified on Linux: node_modules/lightningcss-linux-arm64-gnu is a top-level
symlink after install. On macOS, the darwin variants will be hoisted instead.
This commit is contained in:
Wawa
2026-05-10 00:14:28 +00:00
parent e618175bba
commit b27e53415f
2 changed files with 20 additions and 0 deletions
+10
View File
@@ -11,6 +11,16 @@
"typescript": "6.0.2",
"ultracite": "^7.2.5",
},
"optionalDependencies": {
"@tailwindcss/oxide-darwin-arm64": "4.3.0",
"@tailwindcss/oxide-darwin-x64": "4.3.0",
"@tailwindcss/oxide-linux-arm64-gnu": "4.3.0",
"@tailwindcss/oxide-linux-x64-gnu": "4.3.0",
"lightningcss-darwin-arm64": "1.32.0",
"lightningcss-darwin-x64": "1.32.0",
"lightningcss-linux-arm64-gnu": "1.32.0",
"lightningcss-linux-x64-gnu": "1.32.0",
},
},
"apps/editor": {
"name": "editor",