{"id":34603,"date":"2025-11-19T17:41:22","date_gmt":"2025-11-19T14:41:22","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=34603"},"modified":"2025-11-19T17:41:22","modified_gmt":"2025-11-19T14:41:22","slug":"giris-npm-scriptlerinin-gucu-ve-onemi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/giris-npm-scriptlerinin-gucu-ve-onemi\/","title":{"rendered":"Giri\u015f: npm Script&#8217;lerinin G\u00fcc\u00fc ve \u00d6nemi"},"content":{"rendered":"<p><body><\/p>\n<h2>Giri\u015f: npm Script&#8217;lerinin G\u00fcc\u00fc ve \u00d6nemi<\/h2>\n<p>Modern web geli\u015ftirme d\u00fcnyas\u0131nda, projelerin karma\u015f\u0131kl\u0131\u011f\u0131 her ge\u00e7en g\u00fcn artmaktad\u0131r. Bu karma\u015f\u0131kl\u0131kla ba\u015fa \u00e7\u0131kmak, geli\u015ftiricilerin tekrarlayan g\u00f6revleri otomatikle\u015ftirmesini, tutarl\u0131l\u0131\u011f\u0131 sa\u011flamas\u0131n\u0131 ve farkl\u0131 ortamlar aras\u0131nda uyumlulu\u011fu korumas\u0131n\u0131 gerektirir. \u0130\u015fte tam bu noktada, <a href=\"https:\/\/docs.npmjs.com\/cli\/v10\/using-npm\/scripts\" target=\"_blank\">npm script&#8217;leri<\/a> devreye girer. npm (Node Package Manager), sadece paket y\u00f6netimi i\u00e7in de\u011fil, ayn\u0131 zamanda projelerinizdeki \u00e7e\u015fitli g\u00f6revleri tan\u0131mlamak ve \u00e7al\u0131\u015ft\u0131rmak i\u00e7in de g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r.<\/p>\n<p>npm script&#8217;leri, temel olarak <code>package.json<\/code> dosyan\u0131zda tan\u0131mlanan komut sat\u0131r\u0131 komutlar\u0131d\u0131r. Bu komutlar, projenizin geli\u015ftirme, test, derleme ve da\u011f\u0131t\u0131m gibi ya\u015fam d\u00f6ng\u00fcs\u00fc boyunca ihtiya\u00e7 duydu\u011fu t\u00fcm i\u015flemleri kapsayabilir. Bir geli\u015ftirme sunucusu ba\u015flatmaktan, kodunuzu lint&#8217;lemekten, testleri \u00e7al\u0131\u015ft\u0131rmaktan veya \u00fcretim i\u00e7in bir proje derlemekten tutun da, \u00f6zel otomasyon g\u00f6revlerine kadar her \u015feyi npm script&#8217;leri arac\u0131l\u0131\u011f\u0131yla y\u00f6netebilirsiniz.<\/p>\n<p>Peki, neden do\u011frudan komut sat\u0131r\u0131ndan \u00e7al\u0131\u015ft\u0131rmak yerine npm script&#8217;leri kullanmal\u0131y\u0131z? Birincisi, <strong>otomasyon ve verimlilik<\/strong> sa\u011flar. Uzun ve karma\u015f\u0131k komutlar\u0131 tek bir k\u0131sa script ad\u0131yla \u00e7a\u011f\u0131rabilirsiniz. \u0130kincisi, <strong>tutarl\u0131l\u0131k<\/strong> yarat\u0131r. Ekip \u00fcyeleri, her zaman ayn\u0131 komutlar\u0131 kullanarak ayn\u0131 sonu\u00e7lar\u0131 elde eder, bu da &#8220;benim makinemde \u00e7al\u0131\u015f\u0131yor&#8221; sorununu azalt\u0131r. \u00dc\u00e7\u00fcnc\u00fcs\u00fc, <strong>platformlar aras\u0131 uyumluluk<\/strong> sunar. \u00d6rne\u011fin, Windows&#8217;ta farkl\u0131 \u00e7al\u0131\u015fan bir komutun, Linux veya macOS&#8217;ta da sorunsuz \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flayacak ara\u00e7larla entegre edilebilirler. Son olarak, projenizin ihtiya\u00e7 duydu\u011fu t\u00fcm ara\u00e7lar\u0131 ve komutlar\u0131 tek bir merkezi yerde, yani <code>package.json<\/code> dosyas\u0131nda belgelemi\u015f olursunuz.<\/p>\n<h2>npm Script&#8217;lerinin Temelleri ve Tan\u0131mlanmas\u0131<\/h2>\n<p>npm script&#8217;leri, projenizin kalbi olan <code>package.json<\/code> dosyas\u0131n\u0131n <code>scripts<\/code> b\u00f6l\u00fcm\u00fcnde tan\u0131mlan\u0131r. Bu b\u00f6l\u00fcm, key-value \u00e7iftlerinden olu\u015fur; key script&#8217;in ad\u0131n\u0131, value ise \u00e7al\u0131\u015ft\u0131r\u0131lacak komutu temsil eder. \u0130\u015fte basit bir \u00f6rnek:<\/p>\n<pre><code class=\"language-json\">{\n  \"name\": \"my-awesome-project\",\n  \"version\": \"1.0.0\",\n  \"description\": \"A demo project using npm scripts\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"start\": \"node index.js\",\n    \"test\": \"echo \\\"Hata yok!\\\" && exit 0\",\n    \"build\": \"webpack --config webpack.config.js\",\n    \"lint\": \"eslint . --ext .js,.jsx,.ts,.tsx\"\n  },\n  \"keywords\": [],\n  \"author\": \"\",\n  \"license\": \"ISC\"\n}<\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte:<\/p>\n<ul>\n<li><code>start<\/code>: Projeyi ba\u015flatmak i\u00e7in <code>node index.js<\/code> komutunu \u00e7al\u0131\u015ft\u0131r\u0131r.<\/li>\n<li><code>test<\/code>: Basit bir test mesaj\u0131 yazd\u0131r\u0131r. Ger\u00e7ek bir test komutu genellikle bir test runner (Jest, Mocha vb.) \u00e7a\u011f\u0131r\u0131r.<\/li>\n<li><code>build<\/code>: Projeyi derlemek i\u00e7in <code>webpack<\/code> komutunu kullan\u0131r.<\/li>\n<li><code>lint<\/code>: Kod kalitesini kontrol etmek i\u00e7in <code>eslint<\/code> komutunu \u00e7al\u0131\u015ft\u0131r\u0131r.<\/li>\n<\/ul>\n<p>Bir script&#8217;i \u00e7al\u0131\u015ft\u0131rmak i\u00e7in komut sat\u0131r\u0131nda <code>npm run <script-ad\u0131><\/code> yap\u0131s\u0131n\u0131 kullan\u0131rs\u0131n\u0131z. \u00d6rne\u011fin, <code>npm run build<\/code> veya <code>npm run lint<\/code>. Baz\u0131 \u00f6zel script&#8217;ler i\u00e7in (<code>start<\/code>, <code>test<\/code>, <code>install<\/code>), <code>run<\/code> kelimesini atlayabilirsiniz: <code>npm start<\/code>, <code>npm test<\/code>, <code>npm install<\/code>.<\/p>\n<h3>H3: Script&#8217;lere Ba\u011f\u0131ms\u0131z De\u011fi\u015fkenler (Arguments) Ge\u00e7irme<\/h3>\n<p>Bazen script&#8217;lerinize ek parametreler ge\u00e7irmek isteyebilirsiniz. Bunu <code>npm run <script-ad\u0131> -- <arg1> <arg2><\/code> \u015feklinde yapabilirsiniz. \u00c7ift tire (<code>--<\/code>), npm&#8217;e sonraki her \u015feyin script&#8217;in kendi komutuna iletilmesi gerekti\u011fini bildirir.<\/p>\n<pre><code class=\"language-json\">{\n  \"scripts\": {\n    \"dev\": \"webpack-dev-server\",\n    \"dev:port\": \"webpack-dev-server --port\"\n  }\n}<\/code><\/pre>\n<p>\u015eimdi, <code>npm run dev:port -- 8081<\/code> komutu, <code>webpack-dev-server --port 8081<\/code> komutunu \u00e7al\u0131\u015ft\u0131racakt\u0131r.<\/p>\n<h3>H3: Script&#8217;leri Zincirleme ve Paralel \u00c7al\u0131\u015ft\u0131rma<\/h3>\n<p>Birden fazla komutu tek bir script i\u00e7inde \u00e7al\u0131\u015ft\u0131rmak m\u00fcmk\u00fcnd\u00fcr:<\/p>\n<ul>\n<li><strong>S\u0131ral\u0131 \u00c7al\u0131\u015ft\u0131rma (<code>&&<\/code>):<\/strong> Bir komutun ba\u015far\u0131yla tamamlanmas\u0131ndan sonra di\u011ferini \u00e7al\u0131\u015ft\u0131r\u0131r. E\u011fer ilk komut hata verirse, zincir durur.<\/li>\n<li><strong>Paralel \u00c7al\u0131\u015ft\u0131rma (<code>&<\/code>):<\/strong> T\u00fcm komutlar\u0131 ayn\u0131 anda ba\u015flat\u0131r.<\/li>\n<\/ul>\n<pre><code class=\"language-json\">{\n  \"scripts\": {\n    \"prebuild\": \"npm run clean && npm run lint\",\n    \"build\": \"webpack\",\n    \"dev:all\": \"npm run watch-css & npm run dev-server\"\n  }\n}<\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>prebuild<\/code> script&#8217;i \u00f6nce <code>clean<\/code> komutunu, ard\u0131ndan <code>lint<\/code> komutunu \u00e7al\u0131\u015ft\u0131r\u0131r. <code>dev:all<\/code> ise <code>watch-css<\/code> ve <code>dev-server<\/code> komutlar\u0131n\u0131 ayn\u0131 anda ba\u015flat\u0131r.<\/p>\n<h2>Geli\u015ftirme S\u00fcrecinde S\u0131k Kullan\u0131lan npm Script Senaryolar\u0131<\/h2>\n<p>npm script&#8217;leri, geli\u015ftirme i\u015f ak\u0131\u015f\u0131n\u0131z\u0131n bir\u00e7ok a\u015famas\u0131nda size yard\u0131mc\u0131 olabilir. \u0130\u015fte en yayg\u0131n senaryolardan baz\u0131lar\u0131:<\/p>\n<h3>H3: Geli\u015ftirme Sunucusu (Development Server) Ba\u015flatma<\/h3>\n<p>Tekrar tekrar manuel olarak bir geli\u015ftirme sunucusu ba\u015flatmak yerine, bunu bir script ile otomatikle\u015ftirebilirsiniz. Genellikle <code>start<\/code> veya <code>dev<\/code> ad\u0131 verilir.<\/p>\n<pre><code class=\"language-json\">{\n  \"scripts\": {\n    \"dev\": \"vite\",\n    \"start\": \"react-scripts start\",\n    \"serve\": \"nodemon server.js\"\n  }\n}<\/code><\/pre>\n<ul>\n<li><code>npm run dev<\/code>: Vite tabanl\u0131 bir projeyi geli\u015ftirme modunda ba\u015flat\u0131r.<\/li>\n<li><code>npm start<\/code>: Create React App projelerinde varsay\u0131lan geli\u015ftirme sunucusunu ba\u015flat\u0131r.<\/li>\n<li><code>npm run serve<\/code>: Node.js tabanl\u0131 bir backend sunucusunu <code>nodemon<\/code> ile izleyerek ba\u015flat\u0131r, dosya de\u011fi\u015fikliklerinde otomatik yeniden ba\u015flatma sa\u011flar.<\/li>\n<\/ul>\n<h3>H3: Kod Kalitesi ve Bi\u00e7imlendirme (Linting &#038; Formatting)<\/h3>\n<p>Kodunuzun belirli standartlara uygun olmas\u0131n\u0131 sa\u011flamak ve tutarl\u0131 bir bi\u00e7imlendirme uygulamak i\u00e7in linting ve formatting ara\u00e7lar\u0131n\u0131 kullan\u0131rs\u0131n\u0131z. Bu ara\u00e7lar\u0131 npm script&#8217;lerine entegre etmek, ekip genelinde kod kalitesini art\u0131r\u0131r.<\/p>\n<pre><code class=\"language-json\">{\n  \"scripts\": {\n    \"lint\": \"eslint src\/<em><\/em>\/*.js\",\n    \"lint:fix\": \"eslint src\/<em><\/em>\/*.js --fix\",\n    \"format\": \"prettier --write \\\"src\/<em><\/em>\/*.{js,jsx,ts,tsx,json,css,scss,md}\\\"\"\n  }\n}<\/code><\/pre>\n<ul>\n<li><code>npm run lint<\/code>: Projenizdeki JavaScript dosyalar\u0131n\u0131 ESLint ile kontrol eder.<\/li>\n<li><code>npm run lint:fix<\/code>: ESLint&#8217;in otomatik olarak d\u00fczeltebilece\u011fi sorunlar\u0131 giderir.<\/li>\n<li><code>npm run format<\/code>: Prettier ile projenizdeki dosyalar\u0131 belirlenen stil kurallar\u0131na g\u00f6re bi\u00e7imlendirir.<\/li>\n<\/ul>\n<h3>H3: Testleri \u00c7al\u0131\u015ft\u0131rma<\/h3>\n<p>Yaz\u0131l\u0131m geli\u015ftirme s\u00fcrecinin vazge\u00e7ilmez bir par\u00e7as\u0131 olan testleri \u00e7al\u0131\u015ft\u0131rmak i\u00e7in de npm script&#8217;lerini kullanabilirsiniz. Bu, birim testleri, entegrasyon testleri veya u\u00e7tan uca testler olabilir.<\/p>\n<pre><code class=\"language-json\">{\n  \"scripts\": {\n    \"test\": \"jest\",\n    \"test:watch\": \"jest --watchAll\",\n    \"test:coverage\": \"jest --coverage\"\n  }\n}<\/code><\/pre>\n<ul>\n<li><code>npm test<\/code>: Jest ile t\u00fcm testleri \u00e7al\u0131\u015ft\u0131r\u0131r.<\/li>\n<li><code>npm run test:watch<\/code>: Jest&#8217;i izleme modunda ba\u015flat\u0131r, dosya de\u011fi\u015fikliklerinde ilgili testleri otomatik olarak yeniden \u00e7al\u0131\u015ft\u0131r\u0131r.<\/li>\n<li><code>npm run test:coverage<\/code>: Jest ile test kapsam\u0131 raporu olu\u015fturur.<\/li>\n<\/ul>\n<h3>H3: \u00dcretim \u0130\u00e7in Derleme (Building for Production)<\/h3>\n<p>Projenizi da\u011f\u0131t\u0131ma haz\u0131r hale getirmek i\u00e7in genellikle bir derleme (build) ad\u0131m\u0131 gereklidir. Bu ad\u0131m, kodu s\u0131k\u0131\u015ft\u0131rma, optimizasyon yapma ve da\u011f\u0131t\u0131labilir dosyalar\u0131 olu\u015fturma gibi i\u015flemleri i\u00e7erir.<\/p>\n<pre><code class=\"language-json\">{\n  \"scripts\": {\n    \"build\": \"webpack --mode production\",\n    \"build:clean\": \"rm -rf dist && npm run build\",\n    \"predeploy\": \"npm run build\"\n  }\n}<\/code><\/pre>\n<ul>\n<li><code>npm run build<\/code>: Webpack ile projenizi \u00fcretim modu i\u00e7in derler.<\/li>\n<li><code>npm run build:clean<\/code>: \u00d6nce \u00f6nceki <code>dist<\/code> klas\u00f6r\u00fcn\u00fc siler, sonra derleme i\u015flemini ba\u015flat\u0131r. (Windows i\u00e7in <code>del \/S \/Q dist<\/code> veya <code>rimraf dist<\/code> kullan\u0131labilir.)<\/li>\n<li><code>predeploy<\/code>: Bu, npm&#8217;in \u00f6zel bir hook&#8217;udur. <code>npm run deploy<\/code> komutundan <b>\u00f6nce<\/b> otomatik olarak \u00e7al\u0131\u015f\u0131r. Burada, da\u011f\u0131t\u0131mdan \u00f6nce derleme i\u015flemini tetikleyebilirsiniz.<\/li>\n<\/ul>\n<h2>npm Script&#8217;lerini Daha Verimli Kullanma \u0130pu\u00e7lar\u0131 ve \u0130leri Seviye Teknikler<\/h2>\n<p>npm script&#8217;leri sadece basit komutlar\u0131 \u00e7al\u0131\u015ft\u0131rmaktan ibaret de\u011fildir. Daha karma\u015f\u0131k senaryolar\u0131 y\u00f6netmek ve geli\u015ftirme s\u00fcrecinizi daha da optimize etmek i\u00e7in baz\u0131 ileri seviye teknikler ve ipu\u00e7lar\u0131 bulunmaktad\u0131r.<\/p>\n<h3>H3: Ortam De\u011fi\u015fkenleri (Environment Variables) Kullan\u0131m\u0131<\/h3>\n<p>Script&#8217;lerinizde farkl\u0131 ortamlar i\u00e7in (geli\u015ftirme, test, \u00fcretim) farkl\u0131 yap\u0131land\u0131rmalar kullanman\u0131z gerekebilir. Ortam de\u011fi\u015fkenleri, bu t\u00fcr senaryolarda esneklik sa\u011flar. Ancak, Windows ve Unix tabanl\u0131 sistemlerde ortam de\u011fi\u015fkeni tan\u0131mlama s\u00f6zdizimi farkl\u0131l\u0131k g\u00f6sterir. Bu sorunu \u00e7\u00f6zmek i\u00e7in <a href=\"https:\/\/www.npmjs.com\/package\/cross-env\" target=\"_blank\"><code>cross-env<\/code><\/a> gibi bir paket kullanabilirsiniz.<\/p>\n<pre><code class=\"language-json\">{\n  \"scripts\": {\n    \"dev\": \"cross-env NODE_ENV=development webpack serve\",\n    \"prod\": \"cross-env NODE_ENV=production webpack --mode production\"\n  },\n  \"devDependencies\": {\n    \"cross-env\": \"^7.0.3\"\n  }\n}<\/code><\/pre>\n<p>Burada <code>cross-env<\/code>, <code>NODE_ENV<\/code> ortam de\u011fi\u015fkenini t\u00fcm platformlarda tutarl\u0131 bir \u015fekilde ayarlar.<\/p>\n<h3>H3: Paralel Script \u00c7al\u0131\u015ft\u0131rma i\u00e7in <code>npm-run-all<\/code> veya <code>concurrently<\/code><\/h3>\n<p>Yukar\u0131da bahsetti\u011fimiz <code>&<\/code> operat\u00f6r\u00fc, basit paralel \u00e7al\u0131\u015ft\u0131rmalar i\u00e7in yeterli olabilir, ancak daha karma\u015f\u0131k senaryolarda (\u00f6rne\u011fin, birden fazla script&#8217;i paralel \u00e7al\u0131\u015ft\u0131r\u0131p hepsinin tamamlanmas\u0131n\u0131 beklemek veya log \u00e7\u0131kt\u0131lar\u0131n\u0131 daha iyi y\u00f6netmek) <a href=\"https:\/\/www.npmjs.com\/package\/npm-run-all\" target=\"_blank\"><code>npm-run-all<\/code><\/a> veya <a href=\"https:\/\/www.npmjs.com\/package\/concurrently\" target=\"_blank\"><code>concurrently<\/code><\/a> gibi paketler daha kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<pre><code class=\"language-json\">{\n  \"scripts\": {\n    \"watch-css\": \"sass --watch src\/styles:dist\/css\",\n    \"watch-js\": \"webpack --watch\",\n    \"dev-server\": \"nodemon server.js\",\n    \"dev\": \"concurrently \\\"npm run watch-css\\\" \\\"npm run watch-js\\\" \\\"npm run dev-server\\\"\"\n  },\n  \"devDependencies\": {\n    \"concurrently\": \"^8.2.2\"\n  }\n}<\/code><\/pre>\n<p><code>concurrently<\/code> paketi, birden fazla script&#8217;i paralel olarak \u00e7al\u0131\u015ft\u0131r\u0131r ve her birinin \u00e7\u0131kt\u0131s\u0131n\u0131 ayr\u0131 ayr\u0131 etiketleyerek okunabilirli\u011fi art\u0131r\u0131r.<\/p>\n<h3>H3: Pre\/Post Hook Script&#8217;leri<\/h3>\n<p>npm, belirli script&#8217;lerden \u00f6nce veya sonra otomatik olarak \u00e7al\u0131\u015ft\u0131r\u0131lacak \u00f6zel hook script&#8217;leri tan\u0131mlaman\u0131za olanak tan\u0131r. Bir script&#8217;in ad\u0131 <code><script-ad\u0131><\/code> ise, <code>pre<script-ad\u0131><\/code> ve <code>post<script-ad\u0131><\/code> script&#8217;leri s\u0131ras\u0131yla o script&#8217;ten \u00f6nce ve sonra \u00e7al\u0131\u015f\u0131r.<\/p>\n<pre><code class=\"language-json\">{\n  \"scripts\": {\n    \"clean\": \"rimraf dist\",\n    \"prebuild\": \"npm run clean && echo \\\"Derleme \u00f6ncesi temizlik yap\u0131l\u0131yor...\\\"\",\n    \"build\": \"webpack --mode production\",\n    \"postbuild\": \"echo \\\"Derleme tamamland\u0131!\\\"\"\n  }\n}<\/code><\/pre>\n<p><code>npm run build<\/code> komutunu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda, \u00f6nce <code>prebuild<\/code>, ard\u0131ndan <code>build<\/code> ve son olarak <code>postbuild<\/code> script&#8217;leri otomatik olarak \u00e7al\u0131\u015facakt\u0131r.<\/p>\n<h3>H3: \u00d6zel Komutlar ve K\u0131saltmalar Olu\u015fturma<\/h3>\n<p>Uzun veya s\u0131k kullan\u0131lan komutlar i\u00e7in kendi k\u0131saltmalar\u0131n\u0131z\u0131 olu\u015fturabilirsiniz. Bu, yaz\u0131m hatalar\u0131n\u0131 azalt\u0131r ve geli\u015ftirme h\u0131z\u0131n\u0131z\u0131 art\u0131r\u0131r.<\/p>\n<pre><code class=\"language-json\">{\n  \"scripts\": {\n    \"deploy:prod\": \"aws s3 sync build\/ s3:\/\/my-production-bucket --delete\",\n    \"deploy:staging\": \"aws s3 sync build\/ s3:\/\/my-staging-bucket --delete\",\n    \"deploy\": \"npm run deploy:prod\"\n  }\n}<\/code><\/pre>\n<p>Burada <code>npm run deploy<\/code> komutu, do\u011frudan <code>npm run deploy:prod<\/code> komutunu \u00e7a\u011f\u0131rarak production ortam\u0131na da\u011f\u0131t\u0131m yapar. Bu, varsay\u0131lan bir da\u011f\u0131t\u0131m mekanizmas\u0131 sa\u011flaman\u0131n pratik bir yoludur.<\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h2>\n<p>npm script&#8217;leri, modern JavaScript projelerinin vazge\u00e7ilmez bir par\u00e7as\u0131d\u0131r. Tekrarlayan g\u00f6revleri otomatikle\u015ftirmek, ekip \u00fcyeleri aras\u0131nda tutarl\u0131l\u0131\u011f\u0131 sa\u011flamak, karma\u015f\u0131k komutlar\u0131 basitle\u015ftirmek ve platformlar aras\u0131 uyumlulu\u011fu art\u0131rmak gibi bir\u00e7ok avantaj sunarlar. Projenizin b\u00fcy\u00fckl\u00fc\u011f\u00fc ne olursa olsun, npm script&#8217;lerini etkili bir \u015fekilde kullanmak, geli\u015ftirme s\u00fcrecinizi \u00f6nemli \u00f6l\u00e7\u00fcde h\u0131zland\u0131racak ve daha keyifli hale getirecektir. Bu rehberde ele al\u0131nan temel ve ileri seviye teknikleri uygulayarak, projenizin ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fc daha verimli bir \u015fekilde y\u00f6netebilirsiniz.<\/p>\n<h3>H3: S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<dl>\n<dt><code>npm run<\/code> ve <code>npx<\/code> aras\u0131ndaki fark nedir?<\/dt>\n<dd><code>npm run<\/code>, <code>package.json<\/code> dosyan\u0131z\u0131n <code>scripts<\/code> b\u00f6l\u00fcm\u00fcnde tan\u0131mlanan komutlar\u0131 \u00e7al\u0131\u015ft\u0131r\u0131r. <code>npx<\/code> ise, bir paketi yerel olarak kurmadan \u00e7al\u0131\u015ft\u0131rman\u0131za olanak tan\u0131r. Genellikle tek seferlik komutlar veya global olarak kurmak istemedi\u011finiz CLI ara\u00e7lar\u0131 i\u00e7in kullan\u0131l\u0131r (\u00f6rne\u011fin, <code>npx create-react-app my-app<\/code>).<\/dd>\n<dt>Neden do\u011frudan komutlar\u0131 \u00e7al\u0131\u015ft\u0131rmak yerine npm script kullanmal\u0131y\u0131m?<\/dt>\n<dd>npm script&#8217;ler, komutlar\u0131 otomatikle\u015ftirmeyi, standartla\u015ft\u0131rmay\u0131 ve belgelemeyi sa\u011flar. Ekip i\u00e7inde tutarl\u0131l\u0131k yarat\u0131r, uzun ve karma\u015f\u0131k komutlar\u0131 k\u0131salt\u0131r ve farkl\u0131 i\u015fletim sistemlerinde uyumluluk sorunlar\u0131n\u0131 azalt\u0131r. Ayr\u0131ca, projenin ba\u011f\u0131ml\u0131l\u0131klar\u0131 taraf\u0131ndan sa\u011flanan y\u00fcr\u00fct\u00fclebilir dosyalar\u0131 otomatik olarak PATH&#8217;e ekler, bu da <code>.\/node_modules\/.bin\/webpack<\/code> gibi uzun yollar\u0131 yazmaktan kurtar\u0131r.<\/dd>\n<dt>\u00c7ok fazla script tan\u0131mlamak <code>package.json<\/code> dosyas\u0131n\u0131 karma\u015f\u0131kla\u015ft\u0131r\u0131r m\u0131?<\/dt>\n<dd>Belli bir noktadan sonra <code>package.json<\/code> dosyas\u0131n\u0131n <code>scripts<\/code> b\u00f6l\u00fcm\u00fc uzayabilir. Ancak, iyi adland\u0131rma kurallar\u0131 ve mant\u0131ksal gruplamalar (\u00f6rne\u011fin, <code>test:unit<\/code>, <code>test:e2e<\/code>) kullanarak bu karma\u015f\u0131kl\u0131\u011f\u0131 y\u00f6netebilirsiniz. Ayr\u0131ca, daha karma\u015f\u0131k otomasyonlar i\u00e7in Gulp veya Grunt gibi task runner&#8217;lar yerine npm script&#8217;leri tercih etmek genellikle daha basit ve bak\u0131m\u0131 daha kolay bir yakla\u015f\u0131md\u0131r, zira ek bir ba\u011f\u0131ml\u0131l\u0131k ve \u00f6\u011frenme e\u011frisi getirmez.<\/dd>\n<dt>npm script&#8217;leri Windows ve Linux&#8217;ta farkl\u0131 \u00e7al\u0131\u015f\u0131r m\u0131?<\/dt>\n<dd>Evet, baz\u0131 komutlar ve s\u00f6zdizimleri (\u00f6zellikle ortam de\u011fi\u015fkeni tan\u0131mlamalar\u0131 veya dosya sistemi komutlar\u0131 gibi) farkl\u0131l\u0131k g\u00f6sterebilir. Bu t\u00fcr platformlar aras\u0131 uyumluluk sorunlar\u0131n\u0131 \u00e7\u00f6zmek i\u00e7in <code>cross-env<\/code> (ortam de\u011fi\u015fkenleri i\u00e7in) veya <code>rimraf<\/code> (<code>rm -rf<\/code> yerine) gibi yard\u0131mc\u0131 paketler kullanmak iyi bir pratiktir.<\/dd>\n<dt>Script&#8217;lerimde birden fazla komutu nas\u0131l \u00e7al\u0131\u015ft\u0131r\u0131r\u0131m?<\/dt>\n<dd>S\u0131ral\u0131 \u00e7al\u0131\u015ft\u0131rma i\u00e7in <code>&&<\/code> operat\u00f6r\u00fcn\u00fc (bir \u00f6nceki komut ba\u015far\u0131l\u0131 olursa sonraki \u00e7al\u0131\u015f\u0131r) ve paralel \u00e7al\u0131\u015ft\u0131rma i\u00e7in <code>&<\/code> operat\u00f6r\u00fcn\u00fc kullanabilirsiniz. Daha geli\u015fmi\u015f paralel \u00e7al\u0131\u015ft\u0131rma senaryolar\u0131 i\u00e7in <code>concurrently<\/code> veya <code>npm-run-all<\/code> gibi paketler \u00f6nerilir, \u00e7\u00fcnk\u00fc bunlar \u00e7\u0131kt\u0131y\u0131 daha iyi y\u00f6netir ve ek \u00f6zellikler sunar.<\/dd>\n<\/dl>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Giri\u015f: npm Script&#8217;lerinin G\u00fcc\u00fc ve \u00d6nemi\n    Modern web geli\u015ftirme d\u00fcnyas\u0131nda, projelerin karma\u015f\u0131kl\u0131\u011f\u0131 her ge\u00e7en g\u00fcn artmaktad\u0131r. B","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-34603","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Giri\u015f: npm Script&#039;lerinin G\u00fcc\u00fc ve \u00d6nemi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/giris-npm-scriptlerinin-gucu-ve-onemi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Giri\u015f: npm Script&#039;lerinin G\u00fcc\u00fc ve \u00d6nemi\" \/>\n<meta property=\"og:description\" content=\"Giri\u015f: npm Script&#039;lerinin G\u00fcc\u00fc ve \u00d6nemi   Modern web geli\u015ftirme d\u00fcnyas\u0131nda, projelerin karma\u015f\u0131kl\u0131\u011f\u0131 her ge\u00e7en g\u00fcn artmaktad\u0131r. B\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/giris-npm-scriptlerinin-gucu-ve-onemi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-19T14:41:22+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-npm-scriptlerinin-gucu-ve-onemi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-npm-scriptlerinin-gucu-ve-onemi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Giri\u015f: npm Script&#8217;lerinin G\u00fcc\u00fc ve \u00d6nemi\",\"datePublished\":\"2025-11-19T14:41:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-npm-scriptlerinin-gucu-ve-onemi\/\"},\"wordCount\":1680,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/giris-npm-scriptlerinin-gucu-ve-onemi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-npm-scriptlerinin-gucu-ve-onemi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/giris-npm-scriptlerinin-gucu-ve-onemi\/\",\"name\":\"Giri\u015f: npm Script'lerinin G\u00fcc\u00fc ve \u00d6nemi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-19T14:41:22+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-npm-scriptlerinin-gucu-ve-onemi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/giris-npm-scriptlerinin-gucu-ve-onemi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-npm-scriptlerinin-gucu-ve-onemi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Giri\u015f: npm Script&#8217;lerinin G\u00fcc\u00fc ve \u00d6nemi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Giri\u015f: npm Script'lerinin G\u00fcc\u00fc ve \u00d6nemi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/giris-npm-scriptlerinin-gucu-ve-onemi\/","og_locale":"tr_TR","og_type":"article","og_title":"Giri\u015f: npm Script'lerinin G\u00fcc\u00fc ve \u00d6nemi","og_description":"Giri\u015f: npm Script'lerinin G\u00fcc\u00fc ve \u00d6nemi   Modern web geli\u015ftirme d\u00fcnyas\u0131nda, projelerin karma\u015f\u0131kl\u0131\u011f\u0131 her ge\u00e7en g\u00fcn artmaktad\u0131r. B","og_url":"https:\/\/fatihsoysal.com\/blog\/giris-npm-scriptlerinin-gucu-ve-onemi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-19T14:41:22+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"10 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/giris-npm-scriptlerinin-gucu-ve-onemi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/giris-npm-scriptlerinin-gucu-ve-onemi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Giri\u015f: npm Script&#8217;lerinin G\u00fcc\u00fc ve \u00d6nemi","datePublished":"2025-11-19T14:41:22+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/giris-npm-scriptlerinin-gucu-ve-onemi\/"},"wordCount":1680,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/giris-npm-scriptlerinin-gucu-ve-onemi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/giris-npm-scriptlerinin-gucu-ve-onemi\/","url":"https:\/\/fatihsoysal.com\/blog\/giris-npm-scriptlerinin-gucu-ve-onemi\/","name":"Giri\u015f: npm Script'lerinin G\u00fcc\u00fc ve \u00d6nemi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-19T14:41:22+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/giris-npm-scriptlerinin-gucu-ve-onemi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/giris-npm-scriptlerinin-gucu-ve-onemi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/giris-npm-scriptlerinin-gucu-ve-onemi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Giri\u015f: npm Script&#8217;lerinin G\u00fcc\u00fc ve \u00d6nemi"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34603","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=34603"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34603\/revisions"}],"predecessor-version":[{"id":34604,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34603\/revisions\/34604"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=34603"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=34603"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=34603"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}