Proje: Okul Platform · Hub: Okul Platform — Incidents
Semptom
/kurumsal/home ve diğer sayfalarda FontAwesome ikonları görünmüyordu. public/customer/dist/vendors/fontawesome/all.min.js dosyasının başında Font Awesome Free 7.0.0 yazıyordu; oysa workspace ^6.5.2 kullanıyor.
Root Cause
workspaces/customer/gulp/vendor.gulp.js içindeki vendor:move görevi her vendor dosyasını iki konumdan paralel Promise olarak kopyalıyor:
['../../node_modules/', 'node_modules/'].forEach(module => {
promises.push(new Promise((resolve, reject) => {
gulp.src(module + src, {allowEmpty: true})
.pipe(gulp.dest(dest))
...
}));
});Root package.json’a yanlışlıkla @fortawesome/fontawesome-free: ^7.0.0 eklenince:
../../node_modules/(root) → v7.0.0node_modules/(workspace) → v6.7.2
İkisi paralel çalışıyor; hangisi sonra biterse dist’e o yazılıyor. v7 kazanınca FA 7’nin yeniden adlandırılmış ikonları v6 ile yazılan HTML ile uyumsuz oldu → ikonlar kayboldu.
Çözüm
Root package.json’dan @fortawesome/fontawesome-free kaldırıldı. FA zaten workspaces/customer/package.json’da ^6.5.2 olarak doğru şekilde tanımlı; root’ta olması gerekmiyordu.
Dikkat
vendor:move görevi her zaman race condition potansiyeli taşır: aynı dosya iki konumdan kopyalanıyorsa, her iki node_modules altındaki sürüm farklılaştığında hangi sürümün dist’e yazılacağı belirlenemiyor. Root’a bir paket eklemeden önce workspace’te zaten var mı kontrol et.