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.0
  • node_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.