Proje: Okul Platform · Hub: Okul Platform — Incidents
Semptom
npm run prod GitHub Actions Linux runner’da üst üste başarısız oldu:
[webpack-cli] Error: Cannot find module '@tailwindcss/oxide-linux-x64-gnu'
[webpack-cli] Error: Cannot find module '../lightningcss.linux-x64-gnu.node'
Lokal macOS’ta (darwin-arm64) build sorunsuz.
Root cause
Üç katmanlı bir problem:
- npm cli#4828 optional-deps bug —
@tailwindcss/oxidevelightningcssplatform-özel native binding’lerinioptionalDependenciesüzerinden yayımlıyor (her platform için ayrı paket:-darwin-arm64,-linux-x64-gnu, vb.). macOS’ta oluşturulanpackage-lock.jsonsadece host platformun binding’ini tam node_modules entry’si olarak kaydediyor; Linux binding listede var ama tam tree entry yok. npm cilockfile’ı birebir izliyor — eksik tree entry’li platform binding’ini “kur” diye yorumlamıyor, geçiyor.- Node 18 EBADENGINE —
@tailwindcss/oxide@4.2.2Node ≥20 istiyor. Node 18’de npm optional-deps’i sessizce atlıyor.
Çözüm (.github/workflows/build-assets.yml)
node-version: '18'→'20'npm cisonrası platform binding’lerini explicit install et (lockfile’a dokunmadan):run: | npm ci npm install --no-save --no-audit --no-fund \ @tailwindcss/oxide-linux-x64-gnu \ lightningcss-linux-x64-gnu
Denenen ve reddedilen yaklaşımlar
rm package-lock.json && npm install— Linux’ta taze resolve ediyor ama fresh tree farklı transitive dep versiyonları üretiyor, customer workspacegulp build:staticENOENT ile patladı (gulp-stream empty-glob davranışı değişti).- Lockfile’ı macOS’ta regenerate et — aynı npm bug tekrar tetikleniyor, Linux binding’i yine node_modules tree’de eksik kalıyor.
Kalıcı ders
Tailwind v4 + Linux CI kombinasyonu için lockfile’ı author-platform’da bırak + explicit platform binding install’u en stabil yol. npm ci determinizmini korur, customer workspace’i kırmaz.
Related
- 2026-04-16-webpack-5-94-pinning — CI build’i düzeldikten sonra tetiklenen webpack ProgressPlugin hatası
- Okul Platform — Incidents