Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

NPM script'lerini optimize ederek node_modules/.bin yolunu kullanarak build sürelerini nasıl kısalttığım

✖ Kapat
Duyuru
✖ Kapat
Duyuru

codrix

Üye
Katılım
14 Mart 2026
Mesajlar
57
Merhaba arkadaşlar, bugün sizlere özellikle büyük projelerde can sıkıcı bir hal alan build sürelerini, basit bir NPM script optimizasyonuyla nasıl gözle görülür şekilde kısalttığımı anlatacağım. Bu hatayı ilk gördüğümde kafayı yemiştim, çünkü her `npm run build` komutunu verdiğimde sanki bir kahve molası vermem gerekiyormuş gibi hissettiriyordu.

🔥 Sorunun Kökeni: Global mi, Lokal mi?

Sorunum şuydu: Projemdeki package.json dosyasındaki script'lerim, `webpack`, `babel`, `jest` gibi araçları global olarak yüklenmiş gibi çağırıyordu. Örneğin script'im şöyleydi:
JSON:
"scripts": {
  "build": "webpack --config webpack.prod.js",
  "test": "jest"
}
Bu, sistemimde global olarak yüklü olan `webpack` ve `jest` komutlarını çalıştırıyordu. Ancak bu durumun iki büyük dezavantajı vardı. Birincisi, ekip arkadaşlarının makinelerinde global versiyon farklılıklarından kaynaklanan tutarsızlıklar yaşanıyordu. İkincisi ve daha önemlisi, bu araçların çalıştırılabilir dosyaları zaten projemin node_modules/.bin klasöründe duruyordu ve her seferinde PATH üzerinden globala bakmak bir gecikmeye sebep oluyordu. Ayrıca CI/CD pipeline'ında da bu tutarsızlık sorun yaratıyordu.

💡 Çözüm: Doğrudan .bin Yoluna Gitmek

Çözüm aslında çok basitti. NPM veya Yarn, bir paketi yüklediğinde, onun çalıştırılabilir (binary) dosyasını `node_modules/.bin` dizini altına linkliyor. Script'lerimizi buradaki dosyaları doğrudan çağıracak şekilde yazarsak, sistemin global PATH'ini taramasına gerek kalmaz. İşte benim kullandığım en temiz çözüm:

JSON:
"scripts": {
  "build": "./node_modules/.bin/webpack --config webpack.prod.js",
  "test": "./node_modules/.bin/jest",
  "lint": "./node_modules/.bin/eslint src/",
  "format": "./node_modules/.bin/prettier --write ."
}

Bu basit değişiklikle, komut çalıştırıldığında işletim sistemi doğrudan proje içindeki, o projeye özel versiyona gidiyor. Bu sayede:
Versiyon tutarlılığı %100 sağlandı.
Komut çalıştırma süresinde, özellikle büyük projelerde küçük ama hissedilir bir hızlanma oldu (PATH araması ortadan kalktı).
CI/CD ortamında "komut bulunamadı" hataları tarihe karıştı.

⚙️ Bir Adım Ötesi: npm-run-all ile Paralel Çalıştırma

Bu optimizasyonu, `npm-run-all` paketi ile birleştirince build sürelerim daha da kısaldı. Örneğin, `build:js` ve `build:css` gibi birbirinden bağımsız işleri paralel çalıştırabilirsiniz.

JSON:
"scripts": {
  "build:js": "./node_modules/.bin/webpack --config webpack.prod.js",
  "build:css": "./node_modules/.bin/node-sass src/scss -o dist/css",
  "build": "npm-run-all --parallel build:js build:css"
}

Bu yapı, işlemci gücünüzü daha verimli kullanmanızı ve build sürelerini ciddi oranda düşürmenizi sağlar. Tabii ki script'lerin birbirine bağımlı olmamasına dikkat etmek gerekiyor.

Sonuç olarak, bu küçük görünen değişiklik proje yönetiminde büyük bir rahatlık getirdi. Siz de projelerinizdeki NPM script'lerini kontrol edip, global çağrılar yerine lokal `.bin` yolunu kullanıyor musunuz? Ya da build sürelerinizi kısaltmak için farklı hangi numaraları kullanıyorsunuz? Yorumlarda deneyimlerinizi paylaşın, hep birlikte öğrenelim!
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri