Node.js Path
Bu yazımızda path oldukça çok kullandığımız path modulünün kullanımında en çok kullanılan yapılardan kısaca bahsedeceğim.
node 10 + sürümü ile yerleşik olarak gelen path modulü için;
import path from 'node:path';ile dahil ettiğimiz path modulünde dosya ve klasör yollarını oluşturmak, parçalamak ve düzenlemek için kullnabileceğimiz yapılardan bazıları;
→ path.sep: Dosya yolu parçaları arasındaki ayraçtır.
→ path.delimiter: PATH gibi ortam değişkenlerinde birden fazla yolu ayıran karakterdir.
import path from "node:path";
console.log(path.delimiter);
console.log(path.sep);
//mac ve linux için sırasıyla ":" , "/"
//win için ";" , "/"→ path.basename() :Bir yolun son bölümünü, genellikle dosya adını döndürür.
import path from "node:path";
const filePath = "/app/src/index.js";
console.log(path.basename(filePath));
console.log(path.basename(filePath, ".js"));
/*
index.js
index
*/
İkinci argüman olan .js, sonuçtan kaldırılacak uzantıyı belirtir. Dosyanın kendisini silmez veya değiştirmez.
→ path.dirname() : Üst klasörü alır.
import path from "node:path";
console.log(path.dirname("/app/src/index.js"));
//app/srcDosyanın bulunduğu dizini verir. Dosya sisteminde gerçekten bir klasörün var olup olmadığını kontrol etmez.
→path.extname(): Uzantıyı verir.
import path from "node:path";
console.log(path.extname("report.pdf"));
console.log(path.extname("archive.tar.gz"));
console.log(path.extname("README"));
console.log(path.extname(".env"));
// .pdf
//.gz
/*
Son iki satırın çıktısı boş stringdir.
Çünkü README içinde uzantı yoktur;
.env ise yalnızca noktayla başlayan bir dosya adıdır.
*/→ path.parse(): Bir dosya yolunun bileşenlerini ayrı ayrı incelemeni sağlar.
import path from "node:path";
const result = path.parse("/app/src/index.js");
console.log(result);
//mac & linux çıktısı
/*
{
root: "/",
dir: "/app/src",
base: "index.js",
ext: ".js",
name: "index"
}
*/
→ path.format() : Parçalardan bir yol oluşturur.
import path from "node:path";
const filePath = path.format({
dir: "/app/src",
base: "index.js",
});
console.log(filePath);
///app/src/index.js→ path.join() ve path.resolve() : Her ikiside parçaları birleştirir fakat resolve, parçaları işletim sistemine uygun ayraçlarla birleştirir ve . ile .. gibi bölümleri normalleştirir.
import path from "node:path";
const filePath = path.join("files", "documents", "report.pdf");
console.log(filePath);
//files/documents/report.pdfconsole.log(path.join("/app", "src", "..", "files", "a.pdf"));
///app/files/a.pdfresolve, mutlak yol oluşturur.
Get Oğuzhan Aydın’s stories in your inbox
Join Medium for free to get updates from this writer.
→ path.normalize() : Yolu düzenler.
import path from "node:path";
console.log(path.normalize("/app//src/./utils/../index.js"));
///app/src/index.jsİşlemler şu şekilde gerçekleşir:
//tek ayraç haline gelir..mevcut dizini ifade ettiği için kaldırılır.utils/..birbirini götürür.- Normalleştirilmiş yol döner.
→ path.relative(): İki yol arasındaki göreli yolu bulur.
import path from "node:path";
const result = path.relative(
"/app/config",
"/app/src"
);
console.log(result);
//../src
//Çünkü /app/config dizininden önce bir üst dizine (..) çıkılır,
// ardından src klasörüne girilir.Bu metot dosyaları taşımaz; yalnızca iki yol arasındaki ilişkiyi hesaplar.
→path.isAbsolute() :Yol mutlak mı ?
import path from "node:path";
console.log(path.isAbsolute("/app/src/index.js"));
console.log(path.isAbsolute("src/index.js"));
console.log(path.isAbsolute("."));
/*
true
false
false
*/
Mutlak yol, çalışma dizinine bağlı olmayan ve kökten başlayan bir yoldur. Göreli yol ise nereden çalıştığına göre anlam kazanır.
Güvenlik notu: isAbsolute() tek başına bir dosya yolunun güvenli olduğunu kanıtlamaz.
__dirname, __filename ve ESModule
CommonJS’te __dirname hazır bulunur. ES Modules'te ise dosyanın konumunu belirlemek için import.meta.url ile fileURLToPath() ve path.dirname() kullanabilirsin.
Daha detaylı bilgi için bazı kaynaklar bırakıyorum, iyi çalışmalar:)







