{"id":36164,"date":"2025-12-09T12:25:01","date_gmt":"2025-12-09T09:25:01","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/node-jsde-dosya-yollari-neden-bu-kadar-onemli\/"},"modified":"2025-12-09T12:25:01","modified_gmt":"2025-12-09T09:25:01","slug":"node-jsde-dosya-yollari-neden-bu-kadar-onemli","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/node-jsde-dosya-yollari-neden-bu-kadar-onemli\/","title":{"rendered":"Node.js&#8217;de Dosya Yollar\u0131 Neden Bu Kadar \u00d6nemli?"},"content":{"rendered":"<p><title>__dirname Kullan\u0131m\u0131: Node.js&#8217;de Mutlak Dosya Yollar\u0131n\u0131 Y\u00f6netme<\/title><\/p>\n<p>Node.js uygulamalar\u0131n\u0131zda dosya yollar\u0131n\u0131 do\u011fru y\u00f6netmek, projenizin sa\u011flaml\u0131\u011f\u0131 ve ta\u015f\u0131nabilirli\u011fi a\u00e7\u0131s\u0131ndan kritik \u00f6neme sahiptir. Bu makalede, <code>__dirname<\/code> global de\u011fi\u015fkeninin ne oldu\u011funu, neden bu kadar \u00f6nemli oldu\u011funu ve mutlak dosya yollar\u0131n\u0131 g\u00fcvenle nas\u0131l kullanaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m ke\u015ffedece\u011fiz. Ger\u00e7ek d\u00fcnya \u00f6rnekleri ve pratik ipu\u00e7lar\u0131yla Node.js projelerinizde dosya sistemi etkile\u015fimlerini ustal\u0131kla y\u00f6netmeyi \u00f6\u011frenin.<\/p>\n<h2>Node.js&#8217;de Dosya Yollar\u0131 Neden Bu Kadar \u00d6nemli?<\/h2>\n<p>Node.js ile geli\u015ftirme yaparken, dosyalar\u0131 okumak, yazmak, mod\u00fclleri y\u00fcklemek veya statik i\u00e7erik sunmak gibi bir\u00e7ok i\u015flemde dosya yollar\u0131na ihtiya\u00e7 duyar\u0131z. Ancak bu yollar\u0131 do\u011fru bir \u015fekilde y\u00f6netmek, \u00f6zellikle projeniz b\u00fcy\u00fcd\u00fck\u00e7e veya farkl\u0131 ortamlarda \u00e7al\u0131\u015ft\u0131k\u00e7a karma\u015f\u0131k bir hal alabilir. Geli\u015ftiricilerin s\u0131k\u00e7a kar\u015f\u0131la\u015ft\u0131\u011f\u0131 temel sorunlardan biri, &#8220;g\u00f6receli yollar&#8221; kullanman\u0131n getirdi\u011fi belirsizliktir.<\/p>\n<p>G\u00f6receli yollar, mevcut \u00e7al\u0131\u015fma dizinine (<code>process.cwd()<\/code> taraf\u0131ndan d\u00f6nd\u00fcr\u00fclen dizin) g\u00f6re belirlenir. Bu durum, uygulaman\u0131z\u0131 farkl\u0131 bir dizinden ba\u015flatt\u0131\u011f\u0131n\u0131zda veya bir CI\/CD ortam\u0131nda da\u011f\u0131tt\u0131\u011f\u0131n\u0131zda beklenmedik hatalara yol a\u00e7abilir. \u00d6rne\u011fin, uygulaman\u0131z\u0131n ana dizininde bulunan bir <code>config.json<\/code> dosyas\u0131n\u0131 okumak i\u00e7in <code>.\/config.json<\/code> yolunu kulland\u0131\u011f\u0131n\u0131z\u0131 varsayal\u0131m. E\u011fer bu uygulamay\u0131 farkl\u0131 bir alt dizinden \u00e7al\u0131\u015ft\u0131ran bir komut dosyas\u0131 varsa, Node.js dosyay\u0131 bulamayacakt\u0131r \u00e7\u00fcnk\u00fc \u00e7al\u0131\u015fma dizini de\u011fi\u015fmi\u015ftir. Bu t\u00fcr senaryolar, geli\u015ftiriciler i\u00e7in zaman kayb\u0131na ve hatal\u0131 da\u011f\u0131t\u0131mlara neden olabilir.<\/p>\n<p>\u0130\u015fte tam da bu noktada &#8220;mutlak yollar&#8221; devreye girer. Mutlak yollar, dosya sisteminin k\u00f6k\u00fcnden ba\u015flayarak bir dosyan\u0131n veya dizinin tam konumunu belirtir. Bu sayede, uygulaman\u0131z hangi dizinden \u00e7al\u0131\u015ft\u0131r\u0131l\u0131rsa \u00e7al\u0131\u015ft\u0131r\u0131ls\u0131n, belirtilen kayna\u011fa her zaman do\u011fru \u015fekilde eri\u015filebilir. Mutlak yollar, \u00f6zellikle mod\u00fcl y\u00fckleme, yap\u0131land\u0131rma dosyalar\u0131na eri\u015fim, log dosyalar\u0131n\u0131n yaz\u0131lmas\u0131 ve statik i\u00e7erik sunumu gibi durumlarda projenizin g\u00fcvenilirli\u011fini ve ta\u015f\u0131nabilirli\u011fini art\u0131r\u0131r. Node.js&#8217;de mutlak yollar\u0131 y\u00f6netmenin en yayg\u0131n ve g\u00fcvenilir yollar\u0131ndan biri ise <code>__dirname<\/code> global de\u011fi\u015fkenini kullanmakt\u0131r. Bu de\u011fi\u015fken, her zaman i\u00e7inde bulundu\u011fu JavaScript dosyas\u0131n\u0131n dizinini temsil eder ve b\u00f6ylece dosya yolu sorunlar\u0131na zarif bir \u00e7\u00f6z\u00fcm sunar.<\/p>\n<p>Bir an d\u00fc\u015f\u00fcn\u00fcn: B\u00fcy\u00fck bir proje \u00fczerinde \u00e7al\u0131\u015f\u0131yorsunuz ve farkl\u0131 mod\u00fclleriniz var. Her mod\u00fcl kendi i\u00e7inde baz\u0131 kaynak dosyalar\u0131na (\u00f6rne\u011fin, \u015fablonlar, resimler, veri dosyalar\u0131) ihtiya\u00e7 duyuyor. E\u011fer her mod\u00fcl bu kaynaklara g\u00f6receli yollarla eri\u015fmeye \u00e7al\u0131\u015f\u0131rsa, ana uygulaman\u0131n ba\u015flat\u0131ld\u0131\u011f\u0131 dizine ba\u011fl\u0131 olarak s\u00fcrekli olarak yol hatalar\u0131 al\u0131rs\u0131n\u0131z. Bu, \u00f6zellikle karma\u015f\u0131k dizin yap\u0131lar\u0131na sahip projelerde veya birden fazla geli\u015ftiricinin \u00e7al\u0131\u015ft\u0131\u011f\u0131 ekiplerde b\u00fcy\u00fck bir ba\u015f a\u011fr\u0131s\u0131 yarat\u0131r. Mutlak yollar kullanarak bu t\u00fcr belirsizlikleri ortadan kald\u0131r\u0131r ve projenizin her zaman beklendi\u011fi gibi \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flars\u0131n\u0131z. Bu nedenle, <code>__dirname<\/code> gibi ara\u00e7lar\u0131 anlamak ve do\u011fru kullanmak, her Node.js geli\u015ftiricisi i\u00e7in temel bir beceridir.<\/p>\n<h2>__dirname Nedir ve Neden Kullanmal\u0131s\u0131n\u0131z?<\/h2>\n<p><code>__dirname<\/code>, Node.js taraf\u0131ndan sa\u011flanan \u00f6zel bir global de\u011fi\u015fkendir. En basit ifadeyle, bu de\u011fi\u015fken, kendisini i\u00e7eren JavaScript dosyas\u0131n\u0131n dizininin mutlak yolunu (absolute path) bir dize olarak d\u00f6nd\u00fcr\u00fcr. Yani, bir <code>app.js<\/code> dosyas\u0131n\u0131n i\u00e7inde <code>console.log(__dirname)<\/code> yazarsan\u0131z, \u00e7\u0131kt\u0131da <code>app.js<\/code> dosyas\u0131n\u0131n bulundu\u011fu dizinin tam yolunu g\u00f6r\u00fcrs\u00fcn\u00fcz. Bu \u00f6zellik, g\u00f6receli yollar\u0131n belirsizli\u011fini ortadan kald\u0131rarak, projenizin her zaman do\u011fru dosyalara eri\u015fmesini sa\u011flar.<\/p>\n<p>Peki, <code>__dirname<\/code> neden bu kadar \u00f6nemli ve neden kullanmal\u0131s\u0131n\u0131z? Cevap, Node.js uygulamalar\u0131n\u0131n &#8220;\u00e7al\u0131\u015fma dizini&#8221; konsepti ile ilgilidir. Node.js uygulamalar\u0131, genellikle komut sat\u0131r\u0131ndan <code>node app.js<\/code> \u015feklinde ba\u015flat\u0131l\u0131r. Bu durumda, uygulaman\u0131n &#8220;\u00e7al\u0131\u015fma dizini&#8221; komutu verdi\u011finiz dizindir. Ancak, e\u011fer <code>node \/path\/to\/my\/app.js<\/code> \u015feklinde veya bir \u00fcst dizinden <code>node myapp\/app.js<\/code> \u015feklinde \u00e7al\u0131\u015ft\u0131r\u0131rsan\u0131z, \u00e7al\u0131\u015fma dizini de\u011fi\u015fir. Bu durum, g\u00f6receli yollarla (\u00f6rne\u011fin <code>.\/data\/file.txt<\/code>) dosyalara eri\u015fmeye \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131zda sorunlara yol a\u00e7ar, \u00e7\u00fcnk\u00fc bu yol her zaman \u00e7al\u0131\u015fma dizinine g\u00f6re yorumlan\u0131r.<\/p>\n<div class=\"expert-tip\">\n  <strong>Uzman \u0130pucu:<\/strong> <code>__dirname<\/code> ile <code>process.cwd()<\/code> aras\u0131ndaki fark\u0131 iyi anlamak kritik \u00f6neme sahiptir. <code>__dirname<\/code>, her zaman dosyan\u0131n kendisinin bulundu\u011fu dizini verirken, <code>process.cwd()<\/code> uygulaman\u0131n ba\u015flat\u0131ld\u0131\u011f\u0131 (\u00e7al\u0131\u015fma) dizini verir. Bu iki de\u011fer, genellikle farkl\u0131 olabilir ve bu fark, dosya yolu \u00e7\u00f6z\u00fcn\u00fcrl\u00fc\u011f\u00fcnde b\u00fcy\u00fck etkilere sahiptir.\n<\/div>\n<p>\u00d6rne\u011fin, a\u015fa\u011f\u0131daki dizin yap\u0131s\u0131na sahip bir projeniz olsun:<\/p>\n<pre><code>\nmy-project\/\n\u251c\u2500\u2500 app.js\n\u251c\u2500\u2500 config\/\n\u2502   \u2514\u2500\u2500 settings.json\n\u2514\u2500\u2500 scripts\/\n    \u2514\u2500\u2500 start.js\n<\/code><\/pre>\n<p>E\u011fer <code>app.js<\/code> dosyas\u0131n\u0131n i\u00e7inde <code>config\/settings.json<\/code> dosyas\u0131n\u0131 okumak isterseniz, <code>__dirname + '\/config\/settings.json'<\/code> \u015feklinde bir yol olu\u015fturmak, uygulaman\u0131n hangi dizinden \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131\u011f\u0131na bak\u0131lmaks\u0131z\u0131n her zaman do\u011fru dosyaya eri\u015fimi garanti eder. Oysa <code>'.\/config\/settings.json'<\/code> kullan\u0131rsan\u0131z, <code>my-project<\/code> dizininden \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda sorun olmazken, <code>scripts<\/code> dizininden \u00e7al\u0131\u015ft\u0131r\u0131lan bir komutla <code>app.js<\/code> \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda dosya bulunamayacakt\u0131r.<\/p>\n<p><code>__dirname<\/code>&#8216;in bir di\u011fer kuzeni ise <code>__filename<\/code>&#8216;dir. <code>__filename<\/code>, mevcut mod\u00fcl\u00fcn dosya ad\u0131n\u0131n mutlak yolunu d\u00f6nd\u00fcr\u00fcr. Yani <code>__dirname<\/code> dizin ad\u0131n\u0131 verirken, <code>__filename<\/code> tam dosya ad\u0131n\u0131 (dizin yolu dahil) verir. Her ikisi de, Node.js&#8217;in CommonJS mod\u00fcl sisteminin bir par\u00e7as\u0131 olarak global olarak tan\u0131mlanm\u0131\u015ft\u0131r ve herhangi bir <code>require<\/code> i\u015flemine gerek kalmadan do\u011frudan kullan\u0131labilirler.<\/p>\n<p>Mutlak yollar kullanmak, \u00f6zellikle b\u00fcy\u00fck ve karma\u015f\u0131k projelerde, mod\u00fcller aras\u0131 ba\u011f\u0131ml\u0131l\u0131klar\u0131n y\u00f6netilmesinde ve uygulaman\u0131n farkl\u0131 ortamlara (geli\u015ftirme, test, \u00fcretim) da\u011f\u0131t\u0131m\u0131nda tutarl\u0131l\u0131k sa\u011flar. Bu, hata ay\u0131klama s\u00fcrecini kolayla\u015ft\u0131r\u0131r ve projenizin genel sa\u011flaml\u0131\u011f\u0131n\u0131 art\u0131r\u0131r. K\u0131sacas\u0131, <code>__dirname<\/code>, Node.js geli\u015ftiricileri i\u00e7in dosya sistemiyle g\u00fcvenli ve \u00f6ng\u00f6r\u00fclebilir bir \u015fekilde etkile\u015fim kurman\u0131n temel anahtarlar\u0131ndan biridir.<\/p>\n<h2>__dirname Kullan\u0131m\u0131na Giri\u015f: Temel \u00d6rnekler<\/h2>\n<p><code>__dirname<\/code>&#8216;i anlamak kadar, onu pratik senaryolarda nas\u0131l kullanaca\u011f\u0131n\u0131z\u0131 bilmek de \u00f6nemlidir. Bu b\u00f6l\u00fcmde, <code>__dirname<\/code>&#8216;i kullanarak dosya okuma, dosya yazma ve statik dosyalar\u0131 sunma gibi temel i\u015flemleri ad\u0131m ad\u0131m inceleyece\u011fiz. Ayr\u0131ca, Node.js&#8217;in g\u00fc\u00e7l\u00fc <code>path<\/code> mod\u00fcl\u00fc ile <code>__dirname<\/code>&#8216;i birle\u015ftirerek daha sa\u011flam ve platformdan ba\u011f\u0131ms\u0131z dosya yollar\u0131 olu\u015fturmay\u0131 \u00f6\u011frenece\u011fiz.<\/p>\n<h3>Dosya Okuma ve Yazma \u0130\u015flemleri<\/h3>\n<p>Bir Node.js uygulamas\u0131nda en s\u0131k yap\u0131lan i\u015flemlerden biri, yap\u0131land\u0131rma dosyalar\u0131n\u0131 okumak veya log dosyalar\u0131na veri yazmakt\u0131r. <code>__dirname<\/code>, bu t\u00fcr i\u015flemlerde g\u00f6receli yol sorunlar\u0131n\u0131 ortadan kald\u0131r\u0131r.<\/p>\n<p><strong>\u00d6rnek 1: Bir Yap\u0131land\u0131rma Dosyas\u0131n\u0131 Okuma<\/strong><\/p>\n<p>Diyelim ki projenizin k\u00f6k dizininde bir <code>config.json<\/code> dosyan\u0131z var ve bu dosyay\u0131 herhangi bir yerden eri\u015filebilir k\u0131lmak istiyorsunuz.<\/p>\n<pre><code>\n\/\/ project-root\/app.js\nconst fs = require('fs');\nconst path = require('path');\n\n\/\/ __dirname, app.js dosyas\u0131n\u0131n bulundu\u011fu dizini (project-root) temsil eder.\nconst configPath = path.join(__dirname, 'config.json');\n\nfs.readFile(configPath, 'utf8', (err, data) => {\n  if (err) {\n    console.error('Yap\u0131land\u0131rma dosyas\u0131 okunamad\u0131:', err);\n    return;\n  }\n  const config = JSON.parse(data);\n  console.log('Yap\u0131land\u0131rma ayarlar\u0131:', config);\n});\n<\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte, <code>path.join()<\/code> metodunu kullanarak <code>__dirname<\/code> ile <code>config.json<\/code> dosyas\u0131n\u0131n ad\u0131n\u0131 birle\u015ftiriyoruz. <code>path.join()<\/code>, i\u015fletim sistemine \u00f6zg\u00fc yol ay\u0131r\u0131c\u0131lar\u0131n\u0131 (Windows&#8217;ta <code>\\<\/code>, Linux\/macOS&#8217;ta <code>\/<\/code>) otomatik olarak ele ald\u0131\u011f\u0131 i\u00e7in, bu y\u00f6ntem platformdan ba\u011f\u0131ms\u0131z ve daha g\u00fcvenlidir. Bu sayede, <code>app.js<\/code> dosyas\u0131n\u0131 ister <code>project-root<\/code> dizininden, isterse ba\u015fka bir alt dizinden \u00e7al\u0131\u015ft\u0131r\u0131n, <code>config.json<\/code> dosyas\u0131 her zaman bulunacakt\u0131r.<\/p>\n<div class=\"expert-tip\">\n  <strong>Uzman \u0130pucu:<\/strong> Dosya yollar\u0131n\u0131 birle\u015ftirirken asla sadece string birle\u015ftirme (<code>__dirname + '\/config.json'<\/code>) kullanmay\u0131n. <code>path.join()<\/code> veya <code>path.resolve()<\/code> gibi <code>path<\/code> mod\u00fcl\u00fc fonksiyonlar\u0131, farkl\u0131 i\u015fletim sistemlerinde olu\u015fabilecek yol hatalar\u0131n\u0131 \u00f6nler ve kodunuzu daha sa\u011flam hale getirir.\n<\/div>\n<p><strong>\u00d6rnek 2: Log Dosyas\u0131na Yazma<\/strong><\/p>\n<p>Benzer \u015fekilde, uygulaman\u0131z\u0131n loglar\u0131n\u0131 belirli bir dizindeki bir dosyaya yazmak istedi\u011finizde <code>__dirname<\/code> kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<pre><code>\n\/\/ project-root\/logger.js\nconst fs = require('fs');\nconst path = require('path');\n\nconst logDirPath = path.join(__dirname, 'logs');\nconst logFilePath = path.join(logDirPath, 'app.log');\n\n\/\/ Log dizini yoksa olu\u015ftur\nif (!fs.existsSync(logDirPath)) {\n  fs.mkdirSync(logDirPath);\n}\n\nfunction writeLog(message) {\n  const timestamp = new Date().toISOString();\n  const logEntry = <code class=\"language-\">${timestamp} - ${message}\\n<\/code>;\n  fs.appendFile(logFilePath, logEntry, (err) => {\n    if (err) {\n      console.error('Log dosyas\u0131na yaz\u0131lamad\u0131:', err);\n    }\n  });\n}\n\n\/\/ Ba\u015fka bir mod\u00fclden \u00e7a\u011fr\u0131labilir:\n\/\/ writeLog('Uygulama ba\u015flat\u0131ld\u0131.');\n<\/code><\/pre>\n<p>Burada <code>logs<\/code> dizinini olu\u015fturmak i\u00e7in de <code>__dirname<\/code> kullan\u0131yoruz, b\u00f6ylece log dosyalar\u0131 her zaman uygulaman\u0131n ana dizininin alt\u0131nda, beklenen yerde tutulur.<\/p>\n<h3>Statik Dosyalar\u0131 Sunma (Express.js ile Vaka Analizi)<\/h3>\n<p>Web uygulamalar\u0131nda resimler, CSS dosyalar\u0131 ve JavaScript dosyalar\u0131 gibi statik i\u00e7erikleri sunmak yayg\u0131n bir ihtiya\u00e7t\u0131r. Express.js gibi bir framework kullan\u0131yorsan\u0131z, <code>__dirname<\/code> bu i\u015flemi basitle\u015ftirir.<\/p>\n<p><strong>Vaka Analizi: Express.js ile Statik \u0130\u00e7erik Sunumu<\/strong><\/p>\n<p>Diyelim ki bir Express.js uygulaman\u0131z var ve statik dosyalar\u0131n\u0131z <code>public<\/code> ad\u0131nda bir dizinde bulunuyor.<\/p>\n<pre><code>\n\/\/ project-root\/server.js\nconst express = require('express');\nconst path = require('path');\nconst app = express();\nconst port = 3000;\n\n\/\/ Statik dosyalar\u0131n bulundu\u011fu dizini belirtiyoruz\n\/\/ __dirname, server.js dosyas\u0131n\u0131n bulundu\u011fu dizini (project-root) temsil eder.\nconst publicPath = path.join(__dirname, 'public');\n\n\/\/ Express'e statik dosyalar\u0131 bu dizinden sunmas\u0131n\u0131 s\u00f6yl\u00fcyoruz\napp.use(express.static(publicPath));\n\napp.get('\/', (req, res) => {\n  res.sendFile(path.join(publicPath, 'index.html'));\n});\n\napp.listen(port, () => {\n  console.log(<code class=\"language-\">Sunucu http:\/\/localhost:${port} adresinde \u00e7al\u0131\u015f\u0131yor<\/code>);\n});\n<\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>express.static(publicPath)<\/code> middleware&#8217;i, <code>public<\/code> dizinindeki t\u00fcm dosyalar\u0131 do\u011frudan sunar. <code>path.join(__dirname, 'public')<\/code> ifadesi, <code>public<\/code> dizininin mutlak yolunu verir, b\u00f6ylece uygulaman\u0131z nerede \u00e7al\u0131\u015f\u0131rsa \u00e7al\u0131\u015fs\u0131n, taray\u0131c\u0131dan gelen istekler do\u011fru statik dosyalara y\u00f6nlendirilir. Bu, uygulaman\u0131z\u0131n da\u011f\u0131t\u0131m\u0131n\u0131 \u00e7ok daha g\u00fcvenilir hale getirir ve geli\u015ftirme s\u0131ras\u0131nda kar\u015f\u0131la\u015fabilece\u011finiz &#8220;dosya bulunamad\u0131&#8221; hatalar\u0131n\u0131 minimize eder. Ayr\u0131ca, <code>res.sendFile()<\/code> ile belirli bir HTML dosyas\u0131n\u0131 g\u00f6ndermek i\u00e7in de yine <code>publicPath<\/code>&#8216;i kullanarak mutlak yol sa\u011fl\u0131yoruz. Bu temel kullan\u0131mlar, <code>__dirname<\/code>&#8216;in Node.js projelerinizde ne kadar vazge\u00e7ilmez bir ara\u00e7 oldu\u011funu a\u00e7\u0131k\u00e7a ortaya koymaktad\u0131r.<\/p>\n<h2>Geli\u015fmi\u015f __dirname Kullan\u0131mlar\u0131 ve Pratik \u0130pu\u00e7lar\u0131<\/h2>\n<p><code>__dirname<\/code>&#8216;in temel kullan\u0131mlar\u0131 olduk\u00e7a a\u00e7\u0131k olsa da, Node.js ekosisteminde daha karma\u015f\u0131k senaryolarda da bu global de\u011fi\u015fkenin g\u00fcc\u00fcnden faydalanabiliriz. Bu b\u00f6l\u00fcmde, mod\u00fcl \u00e7\u00f6z\u00fcn\u00fcrl\u00fc\u011f\u00fcnde <code>__dirname<\/code>&#8216;in rol\u00fcn\u00fc, farkl\u0131 ortamlar i\u00e7in yap\u0131land\u0131rma y\u00f6netimini ve <code>path<\/code> mod\u00fcl\u00fcn\u00fcn daha ileri seviye fonksiyonlar\u0131yla entegrasyonunu inceleyece\u011fiz. Ayr\u0131ca, ger\u00e7ek d\u00fcnya vaka analizleri ile bu geli\u015fmi\u015f kullan\u0131mlar\u0131 peki\u015ftirece\u011fiz.<\/p>\n<h3>Mod\u00fcl \u00c7\u00f6z\u00fcn\u00fcrl\u00fc\u011f\u00fc ve Dinamik Y\u00fcklemeler<\/h3>\n<p>Node.js&#8217;in <code>require()<\/code> fonksiyonu, mod\u00fclleri y\u00fcklerken karma\u015f\u0131k bir \u00e7\u00f6z\u00fcn\u00fcrl\u00fck mekanizmas\u0131 kullan\u0131r. Genellikle, <code>require('my-module')<\/code> yazd\u0131\u011f\u0131n\u0131zda Node.js, <code>node_modules<\/code> dizinlerinde veya global olarak tan\u0131mlanm\u0131\u015f yollarda bu mod\u00fcl\u00fc arar. Ancak bazen, uygulaman\u0131z\u0131n belirli bir dizininden dinamik olarak mod\u00fcller y\u00fcklemeniz gerekebilir. \u0130\u015fte burada <code>__dirname<\/code> devreye girer.<\/p>\n<pre><code>\n\/\/ project-root\/app.js\nconst path = require('path');\n\n\/\/ Dinamik olarak y\u00fcklenecek mod\u00fcllerin bulundu\u011fu dizin\nconst modulesPath = path.join(__dirname, 'modules');\n\nfunction loadModule(moduleName) {\n  try {\n    const moduleFullPath = path.join(modulesPath, moduleName);\n    const module = require(moduleFullPath); \/\/ Mutlak yolla mod\u00fcl\u00fc y\u00fckle\n    console.log(<code class=\"language-\">Mod\u00fcl '${moduleName}' ba\u015far\u0131yla y\u00fcklendi.<\/code>);\n    return module;\n  } catch (error) {\n    console.error(<code class=\"language-\">Mod\u00fcl '${moduleName}' y\u00fcklenirken hata olu\u015ftu:<\/code>, error.message);\n    return null;\n  }\n}\n\nconst myUtility = loadModule('utility'); \/\/ project-root\/modules\/utility.js\nif (myUtility) {\n  myUtility.doSomething();\n}\n<\/code><\/pre>\n<p>Bu senaryoda, <code>__dirname<\/code>&#8216;i kullanarak <code>modules<\/code> dizininin mutlak yolunu belirliyoruz. Daha sonra, <code>require()<\/code> fonksiyonuna bu mutlak yolu vererek, Node.js&#8217;in mod\u00fcl\u00fc do\u011frudan belirtilen konumdan y\u00fcklemesini sa\u011fl\u0131yoruz. Bu, \u00f6zellikle eklenti mimarileri veya dinamik olarak farkl\u0131 servisleri y\u00fcklemeniz gereken durumlarda \u00e7ok kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<h3>Farkl\u0131 Ortamlar \u0130\u00e7in Yap\u0131land\u0131rma Y\u00f6netimi<\/h3>\n<p>Node.js uygulamalar\u0131 genellikle geli\u015ftirme (development), test (test) ve \u00fcretim (production) gibi farkl\u0131 ortamlarda \u00e7al\u0131\u015f\u0131r. Her ortam\u0131n kendine \u00f6zg\u00fc yap\u0131land\u0131rma ayarlar\u0131 (veritaban\u0131 ba\u011flant\u0131lar\u0131, API anahtarlar\u0131 vb.) olabilir. <code>__dirname<\/code> ve <code>process.env.NODE_ENV<\/code> de\u011fi\u015fkeni, bu yap\u0131land\u0131rmalar\u0131 dinamik olarak y\u00f6netmek i\u00e7in harika bir kombinasyon sunar.<\/p>\n<pre><code>\n\/\/ project-root\/config\/index.js\nconst path = require('path');\nconst fs = require('fs');\n\nconst env = process.env.NODE_ENV || 'development';\nconst configFileName = <code class=\"language-\">${env}.json<\/code>;\nconst configPath = path.join(__dirname, configFileName); \/\/ __dirname burada config dizinini temsil eder\n\nlet config = {};\n\ntry {\n  config = JSON.parse(fs.readFileSync(configPath, 'utf8'));\n  console.log(<code class=\"language-\">'${env}' ortam\u0131 i\u00e7in yap\u0131land\u0131rma y\u00fcklendi.<\/code>);\n} catch (error) {\n  console.warn(<code class=\"language-\">'${env}' ortam\u0131 i\u00e7in yap\u0131land\u0131rma dosyas\u0131 bulunamad\u0131 veya okunamad\u0131. Varsay\u0131lanlar kullan\u0131lacak.<\/code>);\n  \/\/ Varsay\u0131lan yap\u0131land\u0131rma veya hata i\u015fleme\n}\n\nmodule.exports = config;\n<\/code><\/pre>\n<p>Bu yap\u0131land\u0131rma mod\u00fcl\u00fc, <code>NODE_ENV<\/code> ortam de\u011fi\u015fkenine g\u00f6re (\u00f6rne\u011fin <code>development.json<\/code>, <code>production.json<\/code>) ilgili JSON dosyas\u0131n\u0131 y\u00fckler. <code>__dirname<\/code>, <code>config<\/code> dizininin mutlak yolunu sa\u011flad\u0131\u011f\u0131 i\u00e7in, bu yap\u0131land\u0131rma dosyalar\u0131 uygulaman\u0131n neresinden \u00e7a\u011fr\u0131l\u0131rsa \u00e7a\u011fr\u0131ls\u0131n her zaman do\u011fru \u015fekilde bulunur. Bu sayede, farkl\u0131 ortamlar aras\u0131nda ge\u00e7i\u015f yapmak \u00e7ok daha kolay ve hatas\u0131z hale gelir.<\/p>\n<h3>path Mod\u00fcl\u00fcn\u00fcn \u0130leri D\u00fczey Kullan\u0131mlar\u0131<\/h3>\n<p><code>path<\/code> mod\u00fcl\u00fc, <code>__dirname<\/code> ile birlikte kullan\u0131ld\u0131\u011f\u0131nda dosya yolu manip\u00fclasyonunda inan\u0131lmaz bir esneklik sunar. Daha \u00f6nce <code>path.join()<\/code> g\u00f6rm\u00fc\u015ft\u00fck, ancak <code>path.resolve()<\/code>, <code>path.dirname()<\/code>, <code>path.basename()<\/code> ve <code>path.extname()<\/code> gibi di\u011fer fonksiyonlar da olduk\u00e7a faydal\u0131d\u0131r.<\/p>\n<ul>\n<li><code>path.resolve(__dirname, '..', 'data', 'file.txt')<\/code>: Bu, bir dizi yolu birle\u015ftirir ve sonucu mutlak bir yola d\u00f6n\u00fc\u015ft\u00fcr\u00fcr. <code>..<\/code> kullanarak \u00fcst dizine \u00e7\u0131kma yetene\u011fi, <code>__dirname<\/code>&#8216;den yola \u00e7\u0131karak projenizin farkl\u0131 b\u00f6l\u00fcmlerine eri\u015fmek i\u00e7in \u00e7ok g\u00fc\u00e7l\u00fcd\u00fcr.<\/li>\n<li><code>path.dirname(__filename)<\/code>: Bu ifade, asl\u0131nda <code>__dirname<\/code> ile ayn\u0131 de\u011feri d\u00f6nd\u00fcr\u00fcr. Ancak, herhangi bir dosya yolunun dizin b\u00f6l\u00fcm\u00fcn\u00fc almak i\u00e7in genel bir y\u00f6ntem olarak kullan\u0131labilir.<\/li>\n<li><code>path.basename('\/home\/user\/app\/index.js', '.js')<\/code>: Bir dosya yolunun dosya ad\u0131n\u0131 (uzant\u0131s\u0131yla veya uzant\u0131s\u0131z) almak i\u00e7in kullan\u0131l\u0131r.<\/li>\n<li><code>path.extname('\/home\/user\/app\/index.js')<\/code>: Bir dosya yolunun uzant\u0131s\u0131n\u0131 almak i\u00e7in kullan\u0131l\u0131r (<code>.js<\/code>).<\/li>\n<\/ul>\n<pre><code>\n\/\/ project-root\/utils\/file-helpers.js\nconst path = require('path');\n\nfunction getParentDirFile(fileName) {\n  \/\/ __dirname: \/project-root\/utils\n  \/\/ path.resolve(__dirname, '..'): \/project-root\n  return path.resolve(__dirname, '..', fileName);\n}\n\nconst rootReadmePath = getParentDirFile('README.md');\nconsole.log('K\u00f6k dizin README yolu:', rootReadmePath);\n\nconst currentFileName = path.basename(__filename);\nconsole.log('Mevcut dosya ad\u0131:', currentFileName); \/\/ file-helpers.js\n<\/code><\/pre>\n<p>Bu \u00f6rnekler, <code>__dirname<\/code>&#8216;in sadece mevcut dizini de\u011fil, ayn\u0131 zamanda projenin farkl\u0131 katmanlar\u0131ndaki di\u011fer dizinleri veya dosyalar\u0131 dinamik olarak bulmak i\u00e7in nas\u0131l bir ba\u015flang\u0131\u00e7 noktas\u0131 olarak kullan\u0131labilece\u011fini g\u00f6stermektedir. <code>path<\/code> mod\u00fcl\u00fc ile birlikte kullan\u0131ld\u0131\u011f\u0131nda, <code>__dirname<\/code> Node.js uygulamalar\u0131n\u0131zda dosya yolu y\u00f6netimini hem g\u00fc\u00e7l\u00fc hem de hatas\u0131z hale getirir.<\/p>\n<h2>__dirname Kullan\u0131rken Kar\u015f\u0131la\u015f\u0131lan Yayg\u0131n Sorunlar ve \u00c7\u00f6z\u00fcmleri<\/h2>\n<p><code>__dirname<\/code> Node.js&#8217;de mutlak dosya yollar\u0131n\u0131 y\u00f6netmek i\u00e7in paha bi\u00e7ilmez bir ara\u00e7 olsa da, her ara\u00e7 gibi onun da kendine \u00f6zg\u00fc incelikleri ve potansiyel tuzaklar\u0131 vard\u0131r. \u00d6zellikle modern Node.js geli\u015ftirme pratikleriyle birlikte, <code>__dirname<\/code>&#8216;in davran\u0131\u015f\u0131nda farkl\u0131l\u0131klar g\u00f6zlemleyebiliriz. Bu b\u00f6l\u00fcmde, <code>__dirname<\/code> kullan\u0131rken kar\u015f\u0131la\u015fabilece\u011finiz yayg\u0131n sorunlar\u0131 ve bu sorunlara y\u00f6nelik etkili \u00e7\u00f6z\u00fcmleri ele alaca\u011f\u0131z.<\/p>\n<h3>ES Mod\u00fclleri (ESM) ve __dirname Eksikli\u011fi<\/h3>\n<p>Node.js, ba\u015flang\u0131\u00e7ta CommonJS mod\u00fcl sistemi (<code>require()<\/code> ve <code>module.exports<\/code>) ile \u00e7al\u0131\u015f\u0131yordu ve <code>__dirname<\/code> bu sistemin bir par\u00e7as\u0131yd\u0131. Ancak, ECMAScript Mod\u00fclleri (ESM), yani <code>import<\/code> ve <code>export<\/code> s\u00f6zdizimi, Node.js&#8217;e entegre edildik\u00e7e, <code>__dirname<\/code> ve <code>__filename<\/code> gibi global de\u011fi\u015fkenlerin ESM kapsam\u0131nda do\u011frudan bulunmad\u0131\u011f\u0131 fark edildi. Bu durum, \u00f6zellikle <code>type: \"module\"<\/code> olarak i\u015faretlenmi\u015f bir <code>package.json<\/code> dosyan\u0131z veya <code>.mjs<\/code> uzant\u0131l\u0131 dosyalar\u0131n\u0131z varsa bir sorun te\u015fkil eder.<\/p>\n<p><strong>Sorun:<\/strong> ESM mod\u00fcllerinde <code>__dirname<\/code> tan\u0131ms\u0131zd\u0131r.<\/p>\n<p><strong>\u00c7\u00f6z\u00fcm:<\/strong> ESM mod\u00fcllerinde <code>__dirname<\/code>&#8216;e e\u015fde\u011fer bir de\u011fer elde etmek i\u00e7in <code>import.meta.url<\/code> ve Node.js&#8217;in <code>url<\/code> mod\u00fcl\u00fcndeki <code>fileURLToPath<\/code> fonksiyonunu kullanman\u0131z gerekir.<\/p>\n<pre><code>\n\/\/ my-module.mjs (veya package.json'da \"type\": \"module\" olan bir .js dosyas\u0131)\nimport { fileURLToPath } from 'url';\nimport { dirname } from 'path';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nconsole.log('ESM __filename:', __filename);\nconsole.log('ESM __dirname:', __dirname);\n\n\/\/ Art\u0131k __dirname'i CommonJS'deki gibi kullanabilirsiniz\n\/\/ const filePath = path.join(__dirname, 'data.json');\n<\/code><\/pre>\n<p>Bu yakla\u015f\u0131m, ESM ortam\u0131nda da mutlak dizin yolunu g\u00fcvenilir bir \u015fekilde elde etmenizi sa\u011flar. Bu, \u00f6zellikle eski CommonJS tabanl\u0131 kodlar\u0131 ESM&#8217;ye ta\u015f\u0131rken veya karma bir projede \u00e7al\u0131\u015f\u0131rken \u00e7ok \u00f6nemlidir.<\/p>\n<h3>Bundler&#8217;lar (Webpack, Rollup vb.) ile __dirname Davran\u0131\u015f\u0131<\/h3>\n<p>Modern JavaScript geli\u015ftirme s\u00fcre\u00e7lerinde Webpack, Rollup veya Vite gibi bundler&#8217;lar (paketleyiciler) s\u0131k\u00e7a kullan\u0131l\u0131r. Bu ara\u00e7lar, kodunuzu taray\u0131c\u0131da veya Node.js ortam\u0131nda \u00e7al\u0131\u015ft\u0131r\u0131lmak \u00fczere tek bir dosya veya birka\u00e7 dosya halinde birle\u015ftirir. Bu paketleme i\u015flemi s\u0131ras\u0131nda <code>__dirname<\/code>&#8216;in davran\u0131\u015f\u0131 beklentinizden farkl\u0131 olabilir.<\/p>\n<p><strong>Sorun:<\/strong> Bundler&#8217;lar, <code>__dirname<\/code>&#8216;i genellikle paketlenmi\u015f dosyan\u0131n dizinine i\u015faret edecek \u015fekilde de\u011fi\u015ftirir veya sabit bir de\u011fere d\u00f6n\u00fc\u015ft\u00fcr\u00fcr. Bu, orijinal kaynak dosyan\u0131z\u0131n dizini yerine, \u00e7\u0131kt\u0131 dosyas\u0131n\u0131n dizinini g\u00f6sterir ve bu da dosya yolu \u00e7\u00f6z\u00fcn\u00fcrl\u00fc\u011f\u00fcnde hatalara yol a\u00e7abilir.<\/p>\n<p><strong>\u00c7\u00f6z\u00fcm:<\/strong><\/p>\n<ol>\n<li><strong>Node.js ortam\u0131nda:<\/strong> E\u011fer Node.js&#8217;e \u00f6zg\u00fc bir bundler kullan\u0131yorsan\u0131z (\u00f6rne\u011fin Electron uygulamalar\u0131 i\u00e7in), bundler&#8217;\u0131n <code>target: 'node'<\/code> veya benzeri bir ayarla Node.js ortam\u0131n\u0131 hedefledi\u011finden emin olun. Bu genellikle <code>__dirname<\/code>&#8216;in do\u011fru \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar.<\/li>\n<li><strong>Taray\u0131c\u0131 ortam\u0131nda:<\/strong> Taray\u0131c\u0131 ortam\u0131nda <code>__dirname<\/code> diye bir kavram yoktur. E\u011fer Node.js kodunuzu taray\u0131c\u0131ya paketliyorsan\u0131z ve <code>__dirname<\/code> kullan\u0131yorsan\u0131z, bundler genellikle bu de\u011fi\u015fkeni <code>\/<\/code> veya <code>.<\/code> gibi bir string ile de\u011fi\u015ftirir. Bu durumda, taray\u0131c\u0131da dosya sistemi eri\u015fimi m\u00fcmk\u00fcn olmad\u0131\u011f\u0131 i\u00e7in, <code>__dirname<\/code>&#8216;i sadece Node.js ortam\u0131nda kullanmaya \u00f6zen g\u00f6stermelisiniz. Statik dosyalar\u0131n\u0131z\u0131 web sunucusunun k\u00f6k\u00fcnden g\u00f6receli olarak referans vermeniz daha do\u011fru olacakt\u0131r.<\/li>\n<li><strong>Node.js i\u00e7in \u00f6zel yap\u0131land\u0131rma:<\/strong> Baz\u0131 bundler&#8217;lar, <code>__dirname<\/code>&#8216;i nas\u0131l ele alacaklar\u0131na dair \u00f6zel yap\u0131land\u0131rma se\u00e7enekleri sunar (\u00f6rne\u011fin Webpack&#8217;te <code>node: { __dirname: false }<\/code> veya <code>__dirname: 'mock'<\/code>). Bu se\u00e7enekleri dikkatlice inceleyerek bundler&#8217;\u0131n davran\u0131\u015f\u0131n\u0131 kontrol edebilirsiniz.<\/li>\n<\/ol>\n<h3>G\u00fcvenlik Endi\u015feleri: Dizin Ge\u00e7i\u015fi (Directory Traversal) Sald\u0131r\u0131lar\u0131<\/h3>\n<p><code>__dirname<\/code>, mutlak yollar sa\u011flayarak g\u00fcvenli\u011fi art\u0131rsa da, kullan\u0131c\u0131 girdisiyle birle\u015ftirildi\u011finde potansiyel g\u00fcvenlik a\u00e7\u0131klar\u0131na yol a\u00e7abilir. Dizin ge\u00e7i\u015fi (veya Path Traversal) sald\u0131r\u0131lar\u0131, k\u00f6t\u00fc niyetli kullan\u0131c\u0131lar\u0131n uygulaman\u0131n bekledi\u011fi dizinin d\u0131\u015f\u0131ndaki dosyalara eri\u015fmeye \u00e7al\u0131\u015fmas\u0131 durumudur.<\/p>\n<p><strong>Sorun:<\/strong> Kullan\u0131c\u0131dan al\u0131nan bir dosya ad\u0131n\u0131 do\u011frudan <code>__dirname<\/code> ile birle\u015ftirerek dosya sistemi i\u015flemleri yapmak, sald\u0131rganlar\u0131n <code>..\/<\/code> gibi karakter dizileri kullanarak hassas dosyalara (\u00f6rne\u011fin <code>..\/..\/..\/..\/etc\/passwd<\/code>) eri\u015fmesine olanak tan\u0131yabilir.<\/p>\n<pre><code>\n\/\/ K\u00d6T\u00dc \u00d6RNEK: G\u00fcvenlik a\u00e7\u0131\u011f\u0131 i\u00e7erir!\napp.get('\/download\/:filename', (req, res) => {\n  const userProvidedFilename = req.params.filename;\n  const filePath = path.join(__dirname, 'uploads', userProvidedFilename); \/\/ Sald\u0131rgan ..\/ ile d\u0131\u015far\u0131 \u00e7\u0131kabilir!\n  res.sendFile(filePath);\n});\n<\/code><\/pre>\n<p><strong>\u00c7\u00f6z\u00fcm:<\/strong> Kullan\u0131c\u0131 taraf\u0131ndan sa\u011flanan herhangi bir dosya yolunu veya ad\u0131n\u0131 her zaman temizleyin ve do\u011frulay\u0131n. <code>path.resolve()<\/code> ve <code>path.normalize()<\/code> gibi fonksiyonlar\u0131 kullanarak yollar\u0131 g\u00fcvenli hale getirebilir ve ard\u0131ndan olu\u015fturulan yolun beklenen dizin i\u00e7inde kal\u0131p kalmad\u0131\u011f\u0131n\u0131 kontrol edebilirsiniz.<\/p>\n<pre><code>\n\/\/ \u0130Y\u0130 \u00d6RNEK: G\u00fcvenli dosya indirme\napp.get('\/download\/:filename', (req, res) => {\n  const userProvidedFilename = req.params.filename;\n  const uploadDir = path.join(__dirname, 'uploads');\n\n  \/\/ Kullan\u0131c\u0131 taraf\u0131ndan sa\u011flanan dosya ad\u0131n\u0131 temizle ve birle\u015ftir\n  const requestedPath = path.join(uploadDir, path.basename(userProvidedFilename));\n\n  \/\/ Olu\u015fturulan yolun ger\u00e7ekten 'uploads' dizini i\u00e7inde kal\u0131p kalmad\u0131\u011f\u0131n\u0131 kontrol et\n  if (!requestedPath.startsWith(uploadDir + path.sep)) {\n    return res.status(403).send('Yasad\u0131\u015f\u0131 dosya eri\u015fimi.');\n  }\n\n  fs.access(requestedPath, fs.constants.F_OK, (err) => {\n    if (err) {\n      return res.status(404).send('Dosya bulunamad\u0131.');\n    }\n    res.sendFile(requestedPath);\n  });\n});\n<\/code><\/pre>\n<p>Bu g\u00fcvenli \u00f6rnekte, <code>path.basename()<\/code> kullanarak sadece dosya ad\u0131n\u0131 al\u0131yoruz (<code>..\/<\/code> gibi dizin ge\u00e7i\u015flerini engeller) ve ard\u0131ndan olu\u015fturulan yolun <code>uploads<\/code> dizini i\u00e7inde kald\u0131\u011f\u0131ndan emin olmak i\u00e7in bir kontrol yap\u0131yoruz. Bu, dizin ge\u00e7i\u015fi sald\u0131r\u0131lar\u0131na kar\u015f\u0131 \u00f6nemli bir savunma katman\u0131 olu\u015fturur.<\/p>\n<h2>__dirname Alternatifleri ve Modern Yakla\u015f\u0131mlar<\/h2>\n<p><code>__dirname<\/code>, Node.js&#8217;de dosya yollar\u0131n\u0131 y\u00f6netmek i\u00e7in temel bir ara\u00e7 olsa da, her senaryo i\u00e7in tek do\u011fru \u00e7\u00f6z\u00fcm de\u011fildir. \u00d6zellikle modern JavaScript ekosistemindeki geli\u015fmeler ve farkl\u0131 ihtiya\u00e7lar, alternatif yakla\u015f\u0131mlar\u0131 da beraberinde getirmi\u015ftir. Bu b\u00f6l\u00fcmde, <code>__dirname<\/code>&#8216;in baz\u0131 alternatiflerini, bunlar\u0131n ne zaman kullan\u0131lmas\u0131 gerekti\u011fini ve modern Node.js projelerinde dosya yolu y\u00f6netimindeki en iyi uygulamalar\u0131 inceleyece\u011fiz.<\/p>\n<h3>ES Mod\u00fclleri \u0130\u00e7in __dirname T\u00fcretme (Tekrar Vurgu)<\/h3>\n<p>Daha \u00f6nce de bahsetti\u011fimiz gibi, ES Mod\u00fclleri (ESM) ortam\u0131nda <code>__dirname<\/code> global olarak tan\u0131ml\u0131 de\u011fildir. Ancak, bu durum ESM projelerinde mutlak yollara ihtiya\u00e7 duymayaca\u011f\u0131n\u0131z anlam\u0131na gelmez. Neyse ki, <code>import.meta.url<\/code> ve <code>url<\/code> mod\u00fcl\u00fc sayesinde <code>__dirname<\/code>&#8216;in e\u015fde\u011ferini kolayca t\u00fcretebiliriz. Bu, ESM projelerinde de CommonJS&#8217;deki kadar esnek bir \u015fekilde dosya yollar\u0131n\u0131 y\u00f6netebilece\u011finiz anlam\u0131na gelir.<\/p>\n<pre><code>\n\/\/ esm-module.mjs\nimport { fileURLToPath } from 'url';\nimport { dirname } from 'path';\n\n\/\/ Mevcut mod\u00fcl\u00fcn URL'sini al\u0131r (file:\/\/\/path\/to\/esm-module.mjs)\nconst currentFileUrl = import.meta.url;\n\n\/\/ URL'yi dosya yoluna d\u00f6n\u00fc\u015ft\u00fcr\u00fcr (\/path\/to\/esm-module.mjs)\nconst currentFilePath = fileURLToPath(currentFileUrl);\n\n\/\/ Dosya yolundan dizin ad\u0131n\u0131 al\u0131r (\/path\/to\/)\nconst currentDirname = dirname(currentFilePath);\n\nconsole.log('ESM ile elde edilen __dirname:', currentDirname);\n\n\/\/ Art\u0131k currentDirname de\u011fi\u015fkenini CommonJS'deki __dirname gibi kullanabilirsiniz\n\/\/ \u00d6rne\u011fin: const dataFilePath = path.join(currentDirname, 'data', 'config.json');\n<\/code><\/pre>\n<p>Bu y\u00f6ntem, ESM projelerinde tutarl\u0131 ve platformdan ba\u011f\u0131ms\u0131z dosya yolu \u00e7\u00f6z\u00fcn\u00fcrl\u00fc\u011f\u00fc sa\u011flaman\u0131n standart yoludur. Herhangi bir ESM dosyas\u0131nda mutlak dizin yoluna ihtiyac\u0131n\u0131z oldu\u011funda bu kal\u0131b\u0131 kullanmal\u0131s\u0131n\u0131z.<\/p>\n<h3>process.cwd() ve Do\u011fru Kullan\u0131m Senaryolar\u0131<\/h3>\n<p><code>process.cwd()<\/code> fonksiyonu, Node.js uygulamas\u0131n\u0131n o anda \u00e7al\u0131\u015fmakta oldu\u011fu dizinin mutlak yolunu d\u00f6nd\u00fcr\u00fcr. <code>__dirname<\/code>&#8216;den farkl\u0131 olarak, <code>process.cwd()<\/code> her zaman uygulaman\u0131n ba\u015flat\u0131ld\u0131\u011f\u0131 dizini veya <code>process.chdir()<\/code> ile de\u011fi\u015ftirilen dizini g\u00f6sterir, dosyan\u0131n kendi dizinini de\u011fil.<\/p>\n<p><strong>Ne Zaman Kullan\u0131lmal\u0131?<\/strong><\/p>\n<ul>\n<li><strong>Kullan\u0131c\u0131 taraf\u0131ndan sa\u011flanan g\u00f6receli yollar\u0131 \u00e7\u00f6z\u00fcmlemek:<\/strong> E\u011fer kullan\u0131c\u0131 bir komut sat\u0131r\u0131 arg\u00fcman\u0131 olarak g\u00f6receli bir yol verirse (\u00f6rne\u011fin, <code>node app.js --input .\/data\/file.csv<\/code>), bu yolu <code>process.cwd()<\/code> ile birle\u015ftirmek mant\u0131kl\u0131 olabilir, \u00e7\u00fcnk\u00fc kullan\u0131c\u0131 muhtemelen kendi \u00e7al\u0131\u015fma dizinine g\u00f6re bir yol belirtmi\u015ftir.<\/li>\n<li><strong>Genel proje k\u00f6k dizinine referans:<\/strong> Baz\u0131 durumlarda, projenizin ana k\u00f6k dizinine (uygulaman\u0131n ba\u015flat\u0131ld\u0131\u011f\u0131 dizin) g\u00f6re bir dosya yoluna ihtiyac\u0131n\u0131z olabilir. \u00d6zellikle CLI ara\u00e7lar\u0131 geli\u015ftirirken bu faydal\u0131 olabilir.<\/li>\n<\/ul>\n<pre><code>\n\/\/ app.js\nconst path = require('path');\n\n\/\/ Kullan\u0131c\u0131dan gelen bir girdi yolunu \u00e7\u00f6z\u00fcmleme\nconst userInputPath = process.argv[2] || '.\/default.txt'; \/\/ \u00d6rne\u011fin: node app.js .\/my-data.json\n\n\/\/ Kullan\u0131c\u0131 girdisini \u00e7al\u0131\u015fma dizinine g\u00f6re mutlak yola \u00e7evir\nconst resolvedPath = path.resolve(process.cwd(), userInputPath);\n\nconsole.log('\u00c7al\u0131\u015fma dizini (process.cwd()):', process.cwd());\nconsole.log('\u00c7\u00f6z\u00fcmlenen yol:', resolvedPath);\n<\/code><\/pre>\n<p>Ancak, <code>process.cwd()<\/code>&#8216;nin dezavantaj\u0131, uygulaman\u0131n ba\u015flat\u0131ld\u0131\u011f\u0131 dizine ba\u011fl\u0131 olmas\u0131d\u0131r. Bu, uygulaman\u0131z\u0131n ta\u015f\u0131nabilirli\u011fini azaltabilir ve farkl\u0131 ortamlarda beklenmedik davran\u0131\u015flara yol a\u00e7abilir. Bu nedenle, genellikle <code>__dirname<\/code>, uygulaman\u0131n kendi i\u00e7 kaynaklar\u0131na eri\u015fim i\u00e7in daha g\u00fcvenli ve \u00f6ng\u00f6r\u00fclebilir bir se\u00e7enektir.<\/p>\n<h3>fs.realpathSync() ve Sembolik Ba\u011flant\u0131lar<\/h3>\n<p>Baz\u0131 durumlarda, <code>__dirname<\/code> veya <code>process.cwd()<\/code> sembolik ba\u011flant\u0131lar (symlinks) taraf\u0131ndan etkilenen bir yolu d\u00f6nd\u00fcrebilir. E\u011fer uygulaman\u0131z sembolik bir ba\u011flant\u0131 \u00fczerinden \u00e7al\u0131\u015ft\u0131r\u0131l\u0131yorsa ve ger\u00e7ek, fiziksel dosya yoluna ihtiyac\u0131n\u0131z varsa, <code>fs.realpathSync()<\/code> (veya asenkron versiyonu <code>fs.realpath()<\/code>) kullanman\u0131z gerekebilir.<\/p>\n<pre><code>\n\/\/ app.js\nconst fs = require('fs');\nconst path = require('path');\n\n\/\/ E\u011fer app.js bir symlink ise, __dirname symlink'in dizinini verir.\nconsole.log('__dirname (symlink olabilir):', __dirname);\n\ntry {\n  \/\/ Ger\u00e7ek dosya sistemindeki yolu d\u00f6nd\u00fcr\u00fcr\n  const realDirname = fs.realpathSync(__dirname);\n  console.log('Ger\u00e7ek dizin (fs.realpathSync):', realDirname);\n} catch (error) {\n  console.error('Ger\u00e7ek dizin yolu al\u0131namad\u0131:', error);\n}\n<\/code><\/pre>\n<p>Bu, \u00f6zellikle dosya sistemi denetimi veya g\u00fcvenlik kontrolleri yaparken, sembolik ba\u011flant\u0131lar\u0131n yol a\u00e7abilece\u011fi belirsizlikleri gidermek i\u00e7in faydal\u0131d\u0131r.<\/p>\n<h3>Vaka Analizi: TypeScript Projelerinde __dirname Kullan\u0131m\u0131<\/h3>\n<p>TypeScript, modern Node.js geli\u015ftirmenin ayr\u0131lmaz bir par\u00e7as\u0131d\u0131r. TypeScript dosyalar\u0131 (<code>.ts<\/code>), do\u011frudan Node.js taraf\u0131ndan \u00e7al\u0131\u015ft\u0131r\u0131lamaz; \u00f6nce JavaScript&#8217;e (<code>.js<\/code>) derlenmeleri gerekir. Bu derleme s\u00fcreci, <code>__dirname<\/code>&#8216;in nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 etkileyebilir.<\/p>\n<p><strong>Sorun:<\/strong> TypeScript derleyicisi (<code>tsc<\/code>), kaynak <code>.ts<\/code> dosyalar\u0131n\u0131 genellikle farkl\u0131 bir \u00e7\u0131kt\u0131 dizinine (\u00f6rne\u011fin <code>dist<\/code> veya <code>build<\/code>) derler. Bu durumda, derlenmi\u015f <code>.js<\/code> dosyas\u0131ndaki <code>__dirname<\/code>, orijinal <code>.ts<\/code> dosyas\u0131n\u0131n dizini yerine, derlenmi\u015f <code>.js<\/code> dosyas\u0131n\u0131n bulundu\u011fu <code>dist<\/code> dizinini g\u00f6sterecektir. Bu, kaynak dosyalar\u0131n\u0131za g\u00f6receli olarak eri\u015fmeye \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131zda sorun yaratabilir.<\/p>\n<p><strong>\u00c7\u00f6z\u00fcm:<\/strong><\/p>\n<ol>\n<li><strong>Kaynak dizinine g\u00f6re mutlak yol olu\u015fturma:<\/strong> E\u011fer derlenmi\u015f kodunuzdan kaynak dizinindeki bir dosyaya (\u00f6rne\u011fin bir \u015fablon veya statik varl\u0131k) eri\u015fmeniz gerekiyorsa, <code>__dirname<\/code>&#8216;i kullanarak derlenmi\u015f dosyan\u0131n bulundu\u011fu dizinden yukar\u0131 \u00e7\u0131karak kaynak dizinine ula\u015fabilirsiniz.<\/li>\n<li><strong><code>tsconfig.json<\/code> ayarlar\u0131:<\/strong> <code>rootDir<\/code> ve <code>outDir<\/code> ayarlar\u0131n\u0131z\u0131 dikkatli yap\u0131land\u0131r\u0131n.<\/li>\n<\/ol>\n<pre><code>\n\/\/ src\/app.ts (TypeScript kaynak dosyas\u0131)\nimport * as path from 'path';\n\n\/\/ Derleme sonras\u0131 __dirname, \u00f6rne\u011fin \/project-root\/dist dizinini g\u00f6sterecektir.\n\/\/ E\u011fer kaynak dizindeki bir dosyaya (\/project-root\/src\/templates\/welcome.html) eri\u015fmek istiyorsak:\nconst currentDir = __dirname; \/\/ \u00d6rn: \/project-root\/dist\nconst projectRoot = path.resolve(currentDir, '..'); \/\/ \/project-root\n\nconst templatePath = path.join(projectRoot, 'src', 'templates', 'welcome.html');\nconsole.log('\u015eablon yolu:', templatePath);\n\n\/\/ Bu, derlenmi\u015f .js dosyas\u0131n\u0131n dist dizininde olsa bile,\n\/\/ her zaman src\/templates dizinindeki do\u011fru dosyaya i\u015faret edecektir.\n<\/code><\/pre>\n<p>Bu yakla\u015f\u0131m, TypeScript projelerinde <code>__dirname<\/code>&#8216;in derleme sonras\u0131 davran\u0131\u015f\u0131n\u0131 g\u00f6z \u00f6n\u00fcnde bulundurarak, kaynak dosyalar\u0131n\u0131za g\u00fcvenilir bir \u015fekilde eri\u015fmenizi sa\u011flar. Modern Node.js geli\u015ftirme ortamlar\u0131nda, <code>__dirname<\/code>&#8216;in bu n\u00fcanslar\u0131n\u0131 anlamak, daha sa\u011flam ve hatas\u0131z uygulamalar geli\u015ftirmenize yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<h2>Sonu\u00e7: Node.js Projelerinizde __dirname ile G\u00fcvenli Yollar Olu\u015fturun<\/h2>\n<p>Bu makalede, Node.js ekosisteminin temel ta\u015flar\u0131ndan biri olan <code>__dirname<\/code> global de\u011fi\u015fkenini derinlemesine inceledik. Ba\u015flang\u0131\u00e7ta g\u00f6receli yollar\u0131n getirdi\u011fi belirsizlik ve karma\u015f\u0131kl\u0131k sorunlar\u0131na odaklanarak, <code>__dirname<\/code>&#8216;in mutlak dosya yollar\u0131 sa\u011flamadaki kritik rol\u00fcn\u00fc vurgulad\u0131k. Uygulaman\u0131z\u0131n neresinden \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131\u011f\u0131na bak\u0131lmaks\u0131z\u0131n, dosya sistemindeki kaynaklara g\u00fcvenilir bir \u015fekilde eri\u015fmek i\u00e7in <code>__dirname<\/code>&#8216;in vazge\u00e7ilmez oldu\u011funu g\u00f6rd\u00fck.<\/p>\n<p>Temel kullan\u0131mlar\u0131ndan ba\u015flayarak, <code>fs<\/code> ve <code>path<\/code> mod\u00fclleriyle entegrasyonuna, Express.js gibi framework&#8217;lerle statik dosya sunumuna kadar bir\u00e7ok pratik senaryoyu ele ald\u0131k. Ayr\u0131ca, dinamik mod\u00fcl y\u00fcklemeleri ve ortama \u00f6zg\u00fc yap\u0131land\u0131rma y\u00f6netimi gibi geli\u015fmi\u015f kullan\u0131mlarla <code>__dirname<\/code>&#8216;in esnekli\u011fini ke\u015ffettik. Kar\u015f\u0131la\u015f\u0131labilecek ESM&#8217;deki eksikli\u011fi, bundler&#8217;larla entegrasyonu ve dizin ge\u00e7i\u015fi sald\u0131r\u0131lar\u0131 gibi yayg\u0131n sorunlara da \u00e7\u00f6z\u00fcmler sunarak, g\u00fcvenli ve sa\u011flam kod yazman\u0131n \u00f6nemini peki\u015ftirdik. Son olarak, <code>process.cwd()<\/code> ve <code>fs.realpathSync()<\/code> gibi alternatifleri ve TypeScript projelerindeki \u00f6zel durumlar\u0131 de\u011ferlendirerek, modern Node.js geli\u015ftirme ortamlar\u0131nda dosya yolu y\u00f6netimine kapsaml\u0131 bir bak\u0131\u015f a\u00e7\u0131s\u0131 sunduk.<\/p>\n<p>Unutmay\u0131n, Node.js projelerinizde tutarl\u0131, g\u00fcvenilir ve ta\u015f\u0131nabilir dosya yollar\u0131 olu\u015fturmak, uygulaman\u0131z\u0131n sa\u011flaml\u0131\u011f\u0131 ve bak\u0131m\u0131 i\u00e7in hayati \u00f6neme sahiptir. <code>__dirname<\/code>&#8216;i ve <code>path<\/code> mod\u00fcl\u00fcn\u00fc do\u011fru bir \u015fekilde kullanarak, bu hedeflere kolayca ula\u015fabilir ve olas\u0131 dosya yolu hatalar\u0131n\u0131 en aza indirebilirsiniz. Art\u0131k Node.js&#8217;de dosya yollar\u0131n\u0131 y\u00f6netme konusunda daha donan\u0131ml\u0131 oldu\u011funuza g\u00f6re, bu bilgileri kendi projelerinizde uygulamaya ba\u015flay\u0131n ve daha sa\u011flam uygulamalar geli\u015ftirmenin keyfini \u00e7\u0131kar\u0131n!<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<dl>\n<dt><code>__dirname<\/code> ile <code>process.cwd()<\/code> aras\u0131ndaki temel fark nedir?<\/dt>\n<dd><code>__dirname<\/code>, her zaman i\u00e7inde bulundu\u011fu JavaScript dosyas\u0131n\u0131n dizininin mutlak yolunu d\u00f6nd\u00fcr\u00fcr. <code>process.cwd()<\/code> ise, Node.js uygulamas\u0131n\u0131n o anda \u00e7al\u0131\u015fmakta oldu\u011fu (ba\u015flat\u0131ld\u0131\u011f\u0131 veya <code>process.chdir()<\/code> ile de\u011fi\u015ftirilen) dizinin mutlak yolunu d\u00f6nd\u00fcr\u00fcr. Bu iki de\u011fer, uygulaman\u0131n neresinden ba\u015flat\u0131ld\u0131\u011f\u0131na ba\u011fl\u0131 olarak farkl\u0131 olabilir.<\/dd>\n<dt><code>__dirname<\/code> neden ES Mod\u00fcllerinde (ESM) do\u011frudan bulunmuyor?<\/dt>\n<dd><code>__dirname<\/code> ve <code>__filename<\/code>, Node.js&#8217;in CommonJS mod\u00fcl sisteminin (<code>require()<\/code>) bir par\u00e7as\u0131d\u0131r. ES Mod\u00fclleri (<code>import<\/code>\/<code>export<\/code>), ECMAScript standard\u0131na daha uygun bir mod\u00fcl sistemi oldu\u011fu i\u00e7in bu global de\u011fi\u015fkenleri i\u00e7ermez. ESM&#8217;de e\u015fde\u011ferine ula\u015fmak i\u00e7in <code>import.meta.url<\/code> ve <code>url<\/code> mod\u00fcl\u00fcndeki <code>fileURLToPath<\/code> fonksiyonu kullan\u0131l\u0131r.<\/dd>\n<dt><code>__dirname<\/code> kullanmak g\u00fcvenlik a\u00e7\u0131\u011f\u0131 olu\u015fturur mu?<\/dt>\n<dd>Tek ba\u015f\u0131na <code>__dirname<\/code> g\u00fcvenlik a\u00e7\u0131\u011f\u0131 olu\u015fturmaz. Ancak, kullan\u0131c\u0131dan gelen herhangi bir girdiyle (\u00f6rne\u011fin bir dosya ad\u0131) birle\u015ftirilerek dosya sistemi i\u015flemleri yap\u0131ld\u0131\u011f\u0131nda, dizin ge\u00e7i\u015fi (Path Traversal) sald\u0131r\u0131lar\u0131na kar\u015f\u0131 savunmas\u0131z kalabilir. Bu t\u00fcr sald\u0131r\u0131lar\u0131 \u00f6nlemek i\u00e7in, kullan\u0131c\u0131 girdilerini her zaman temizlemeli, do\u011frulamal\u0131 ve olu\u015fturulan yolun beklenen dizin i\u00e7inde kald\u0131\u011f\u0131ndan emin olmal\u0131s\u0131n\u0131z (\u00f6rne\u011fin <code>path.basename()<\/code> ve yol kontrol\u00fc ile).<\/dd>\n<dt><code>path.join()<\/code> yerine neden <code>__dirname + '\/path'<\/code> kullanmamal\u0131y\u0131m?<\/dt>\n<dd><code>path.join()<\/code> fonksiyonu, i\u015fletim sistemine \u00f6zg\u00fc yol ay\u0131r\u0131c\u0131lar\u0131n\u0131 (Windows&#8217;ta <code>\\<\/code>, Linux\/macOS&#8217;ta <code>\/<\/code>) otomatik olarak ele al\u0131r ve birden fazla yol par\u00e7as\u0131n\u0131 do\u011fru bir \u015fekilde birle\u015ftirir. String birle\u015ftirme (<code>+<\/code>) kulland\u0131\u011f\u0131n\u0131zda, farkl\u0131 i\u015fletim sistemlerinde yol ay\u0131r\u0131c\u0131 farkl\u0131l\u0131klar\u0131 nedeniyle (\u00f6rne\u011fin Windows&#8217;ta <code>C:\\path\/to\/file.txt<\/code> gibi karma\u015f\u0131k yollar) hatalar olu\u015fabilir. <code>path.join()<\/code> bu t\u00fcr platformdan ba\u011f\u0131ms\u0131zl\u0131k sorunlar\u0131n\u0131 \u00e7\u00f6zer ve kodunuzu daha sa\u011flam hale getirir.<\/dd>\n<dt>TypeScript projelerinde <code>__dirname<\/code> nas\u0131l \u00e7al\u0131\u015f\u0131r?<\/dt>\n<dd>TypeScript dosyalar\u0131 (<code>.ts<\/code>) derlendi\u011finde, <code>__dirname<\/code> derlenmi\u015f <code>.js<\/code> dosyas\u0131n\u0131n bulundu\u011fu dizini g\u00f6sterir. E\u011fer kaynak <code>.ts<\/code> dosyalar\u0131n\u0131z ve derlenmi\u015f <code>.js<\/code> dosyalar\u0131n\u0131z farkl\u0131 dizinlerdeyse (\u00f6rne\u011fin <code>src<\/code> ve <code>dist<\/code>), <code>__dirname<\/code> derlenmi\u015f dosyan\u0131n <code>dist<\/code> dizinini g\u00f6sterecektir. Bu durumda, kaynak dizindeki bir dosyaya eri\u015fmek i\u00e7in <code>path.resolve(__dirname, '..', 'src', 'your-file.html')<\/code> gibi ifadelerle derlenmi\u015f dizinden yukar\u0131 \u00e7\u0131karak kaynak dizinine ula\u015fman\u0131z gerekebilir.<\/dd>\n<\/dl>\n","protected":false},"excerpt":{"rendered":"__dirname Kullan\u0131m\u0131: Node.js&#8217;de Mutlak Dosya Yollar\u0131n\u0131 Y\u00f6netme Node.js uygulamalar\u0131n\u0131zda dosya yollar\u0131n\u0131 do\u011fru y\u00f6netmek, projenizin sa\u011flaml\u0131\u011f\u0131 ve ta\u015f\u0131nabilirli\u011fi a\u00e7\u0131s\u0131ndan&hellip;","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":[136],"tags":[],"class_list":{"0":"post-36164","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-node-js","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>Node.js&#039;de Dosya Yollar\u0131 Neden Bu Kadar \u00d6nemli?<\/title>\n<meta name=\"description\" content=\"Node.js uygulamalar\u0131n\u0131zda dosya yollar\u0131n\u0131 do\u011fru y\u00f6netmek, projenizin sa\u011flaml\u0131\u011f\u0131 ve ta\u015f\u0131nabilirli\u011fi a\u00e7\u0131s\u0131ndan kritik \u00f6neme sahiptir. Bu makalede, __dirname global de\u011fi\u015fkeninin ne oldu\u011funu, neden bu kadar \u00f6nemli oldu\u011funu ve mutlak dosya yollar\u0131n\u0131 g\u00fcvenle nas\u0131l kullanaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m ke\u015ffedece\u011fiz. Ger\u00e7ek d\u00fcnya \u00f6rnekleri ve pratik ipu\u00e7lar\u0131yla Node.js projelerinizde dosya sistemi etkile\u015fimlerini ustal\u0131kla y\u00f6netmeyi \u00f6\u011frenin.\" \/>\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\/node-jsde-dosya-yollari-neden-bu-kadar-onemli\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Node.js&#039;de Dosya Yollar\u0131 Neden Bu Kadar \u00d6nemli?\" \/>\n<meta property=\"og:description\" content=\"Node.js uygulamalar\u0131n\u0131zda dosya yollar\u0131n\u0131 do\u011fru y\u00f6netmek, projenizin sa\u011flaml\u0131\u011f\u0131 ve ta\u015f\u0131nabilirli\u011fi a\u00e7\u0131s\u0131ndan kritik \u00f6neme sahiptir. Bu makalede, __dirname global de\u011fi\u015fkeninin ne oldu\u011funu, neden bu kadar \u00f6nemli oldu\u011funu ve mutlak dosya yollar\u0131n\u0131 g\u00fcvenle nas\u0131l kullanaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m ke\u015ffedece\u011fiz. Ger\u00e7ek d\u00fcnya \u00f6rnekleri ve pratik ipu\u00e7lar\u0131yla Node.js projelerinizde dosya sistemi etkile\u015fimlerini ustal\u0131kla y\u00f6netmeyi \u00f6\u011frenin.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/node-jsde-dosya-yollari-neden-bu-kadar-onemli\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-09T09:25:01+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=\"27 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-jsde-dosya-yollari-neden-bu-kadar-onemli\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-jsde-dosya-yollari-neden-bu-kadar-onemli\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Node.js&#8217;de Dosya Yollar\u0131 Neden Bu Kadar \u00d6nemli?\",\"datePublished\":\"2025-12-09T09:25:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-jsde-dosya-yollari-neden-bu-kadar-onemli\/\"},\"wordCount\":4082,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Node.js\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/node-jsde-dosya-yollari-neden-bu-kadar-onemli\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-jsde-dosya-yollari-neden-bu-kadar-onemli\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/node-jsde-dosya-yollari-neden-bu-kadar-onemli\/\",\"name\":\"Node.js'de Dosya Yollar\u0131 Neden Bu Kadar \u00d6nemli?\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-12-09T09:25:01+00:00\",\"description\":\"Node.js uygulamalar\u0131n\u0131zda dosya yollar\u0131n\u0131 do\u011fru y\u00f6netmek, projenizin sa\u011flaml\u0131\u011f\u0131 ve ta\u015f\u0131nabilirli\u011fi a\u00e7\u0131s\u0131ndan kritik \u00f6neme sahiptir. Bu makalede, __dirname global de\u011fi\u015fkeninin ne oldu\u011funu, neden bu kadar \u00f6nemli oldu\u011funu ve mutlak dosya yollar\u0131n\u0131 g\u00fcvenle nas\u0131l kullanaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m ke\u015ffedece\u011fiz. Ger\u00e7ek d\u00fcnya \u00f6rnekleri ve pratik ipu\u00e7lar\u0131yla Node.js projelerinizde dosya sistemi etkile\u015fimlerini ustal\u0131kla y\u00f6netmeyi \u00f6\u011frenin.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-jsde-dosya-yollari-neden-bu-kadar-onemli\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/node-jsde-dosya-yollari-neden-bu-kadar-onemli\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-jsde-dosya-yollari-neden-bu-kadar-onemli\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Node.js&#8217;de Dosya Yollar\u0131 Neden Bu Kadar \u00d6nemli?\"}]},{\"@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":"Node.js'de Dosya Yollar\u0131 Neden Bu Kadar \u00d6nemli?","description":"Node.js uygulamalar\u0131n\u0131zda dosya yollar\u0131n\u0131 do\u011fru y\u00f6netmek, projenizin sa\u011flaml\u0131\u011f\u0131 ve ta\u015f\u0131nabilirli\u011fi a\u00e7\u0131s\u0131ndan kritik \u00f6neme sahiptir. Bu makalede, __dirname global de\u011fi\u015fkeninin ne oldu\u011funu, neden bu kadar \u00f6nemli oldu\u011funu ve mutlak dosya yollar\u0131n\u0131 g\u00fcvenle nas\u0131l kullanaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m ke\u015ffedece\u011fiz. Ger\u00e7ek d\u00fcnya \u00f6rnekleri ve pratik ipu\u00e7lar\u0131yla Node.js projelerinizde dosya sistemi etkile\u015fimlerini ustal\u0131kla y\u00f6netmeyi \u00f6\u011frenin.","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\/node-jsde-dosya-yollari-neden-bu-kadar-onemli\/","og_locale":"tr_TR","og_type":"article","og_title":"Node.js'de Dosya Yollar\u0131 Neden Bu Kadar \u00d6nemli?","og_description":"Node.js uygulamalar\u0131n\u0131zda dosya yollar\u0131n\u0131 do\u011fru y\u00f6netmek, projenizin sa\u011flaml\u0131\u011f\u0131 ve ta\u015f\u0131nabilirli\u011fi a\u00e7\u0131s\u0131ndan kritik \u00f6neme sahiptir. Bu makalede, __dirname global de\u011fi\u015fkeninin ne oldu\u011funu, neden bu kadar \u00f6nemli oldu\u011funu ve mutlak dosya yollar\u0131n\u0131 g\u00fcvenle nas\u0131l kullanaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m ke\u015ffedece\u011fiz. Ger\u00e7ek d\u00fcnya \u00f6rnekleri ve pratik ipu\u00e7lar\u0131yla Node.js projelerinizde dosya sistemi etkile\u015fimlerini ustal\u0131kla y\u00f6netmeyi \u00f6\u011frenin.","og_url":"https:\/\/fatihsoysal.com\/blog\/node-jsde-dosya-yollari-neden-bu-kadar-onemli\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-12-09T09:25:01+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"27 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/node-jsde-dosya-yollari-neden-bu-kadar-onemli\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/node-jsde-dosya-yollari-neden-bu-kadar-onemli\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Node.js&#8217;de Dosya Yollar\u0131 Neden Bu Kadar \u00d6nemli?","datePublished":"2025-12-09T09:25:01+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/node-jsde-dosya-yollari-neden-bu-kadar-onemli\/"},"wordCount":4082,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Node.js"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/node-jsde-dosya-yollari-neden-bu-kadar-onemli\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/node-jsde-dosya-yollari-neden-bu-kadar-onemli\/","url":"https:\/\/fatihsoysal.com\/blog\/node-jsde-dosya-yollari-neden-bu-kadar-onemli\/","name":"Node.js'de Dosya Yollar\u0131 Neden Bu Kadar \u00d6nemli?","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-12-09T09:25:01+00:00","description":"Node.js uygulamalar\u0131n\u0131zda dosya yollar\u0131n\u0131 do\u011fru y\u00f6netmek, projenizin sa\u011flaml\u0131\u011f\u0131 ve ta\u015f\u0131nabilirli\u011fi a\u00e7\u0131s\u0131ndan kritik \u00f6neme sahiptir. Bu makalede, __dirname global de\u011fi\u015fkeninin ne oldu\u011funu, neden bu kadar \u00f6nemli oldu\u011funu ve mutlak dosya yollar\u0131n\u0131 g\u00fcvenle nas\u0131l kullanaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m ke\u015ffedece\u011fiz. Ger\u00e7ek d\u00fcnya \u00f6rnekleri ve pratik ipu\u00e7lar\u0131yla Node.js projelerinizde dosya sistemi etkile\u015fimlerini ustal\u0131kla y\u00f6netmeyi \u00f6\u011frenin.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/node-jsde-dosya-yollari-neden-bu-kadar-onemli\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/node-jsde-dosya-yollari-neden-bu-kadar-onemli\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/node-jsde-dosya-yollari-neden-bu-kadar-onemli\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Node.js&#8217;de Dosya Yollar\u0131 Neden Bu Kadar \u00d6nemli?"}]},{"@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\/36164","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=36164"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36164\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=36164"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=36164"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=36164"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}