Node.js'de path.normalize ve path.resolve arasındaki fark


86

Arasındaki fark (varsa) nedir path.normalize(your_path)ve path.resolve(your_path)?

path.resolve(...)Birden fazla argümanı kabul edebileceğini biliyorum , ancak tek argüman içeren davranış çağırmakla aynı path.normalize()mı?

DÜZENLEME: Aynı şekilde davranmaları gerekiyorsa path.normalize(...), yolu basitçe geçtiğinizde işlevi açığa çıkarmanın amacını anlamıyorum path.resolve(...)Veya, belki, bu dokümantasyon amaçlıdır. Örneğin, belgelerde şöyle diyorlar path.resolve(...):

... Ortaya çıkan yol normalleştirilir ve ...

'İ ortaya path.normalize(...)çıkarmak, "normalleştirilmiş" ifadesinin ne anlama geldiğini açıklamayı kolaylaştırır ??? Bilmiyorum.

Yanıtlar:


183

path.normalizeekstra kurtulur ., ..yoldaki vs.. path.resolvebir yolu mutlak bir yola çözer. Örnek (şu anki çalışma dizinim şuydu /Users/mtilley/src/testing):

> path.normalize('../../src/../src/node')
'../../src/node'
> path.resolve('../../src/../src/node')
'/Users/mtilley/src/node'

Başka bir deyişle, path.normalize"Beni girişle aynı yere götürecek, gidebileceğim en kısa yol nedir",path.resolve , "Bu yolu kullanırsam hedefim nedir?"

Ancak unutmayın path.normalize()olduğunu çok daha bağlam bağımsız daha path.resolve(). Had path.normalize()been, duruma de sız (yani o dikkate geçerli çalışma dizini almıştı ise) olurdu yukarıdaki örnekte, sonuç ../nodebundan sürebilir kısa yol biri olduğu, /Users/mtilley/src/testingiçin /Users/mtilley/src/node.

İronik olarak, bu path.resolve(), mutlak terimlerle göreceli bir yol ürettiği anlamına gelir (onu herhangi bir yerde çalıştırabilirsiniz ve aynı sonucu path.normalize()üretir ), oysa göreli terimlerle mutlak bir yol üretir (onu, istediğiniz yolda göreceli olarak yürütmelisiniz. mutlak sonucu hesaplayın).


Güzel. Cevap için teşekkürler! Bu bir süredir beni rahatsız ediyor. Node dokümanları, genellikle oldukça iyi olsalar da, bu konuda beni biraz şaşırttı.
BMiner

14
Ayrıca, path.normalize'ın normalleştirmek isteyebileceğiniz herhangi bir yolu işleyebileceğini ve yolun yalnızca dize manipülasyonu anlamına geldiğini unutmayın; path.resolve ise yolu mutlak bir yola çözümlemek için dosya sistemini ve geçerli dizini kullanır. Path.normalize bir tar dosyası içindeki bir yolda, uzak bir dosya sisteminde veya tamamen soyut bir şey üzerinde kullanılabileceğinden, bu onların oldukça farklı davranmasını sağlar.
Çıplak

Path.join'den nasıl farklılar?
Vijey

2

Dokümanlardan:

Çözümlemeyi düşünmenin başka bir yolu, kabuktaki cd komutları dizisidir.

Belgelerde path.resolve ve path.normalize bağlantıları . Çoğunlukla yalnızca bir yanıtta bağlantı sağlamak istemiyorum, ancak Node.js belgeleri çok iyi.


Yolu basitçe path.resolve (...)
BMiner

6
Normalleştirdiğiniz yol aslında dosya sisteminde bulunmayabilir, örneğin oluşturacağınız bir dosyanın yolunu normalleştiriyor olabilirsiniz veya göreli URL yollarını normalleştiriyor olabilirsiniz.
lanzz

Aslında neden normalize yerine çözümlemeyi kullandığını da bilmiyorum.
Pickels

1
normalize, mutlak bir yola giden yolu tamamlamaz. Bu nedenle, başka bir kaynakla ilgili bazı kaynaklar için mantıklı bir yol elde etmek için kullanılabilir; bu, örneğin, kullanıcı tarafından seçilen bir dosyaya referans vermek için HTML içinde kullanılabilir. Normalleştirilmiş yol her zaman basit olduğundan (fazladan yok ../), kullanıcının yalnızca belirli konumlardan dosyaları seçmesini ve bu konumların dışındaki özel dosyaları görüntüleme şansı olmadığından emin olmak için kolayca kontrol edilebilir.
dronus
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.