Aşağıdaki çağrılar arasında bir fark var mı?
path.join(__dirname, 'app')
vs.
path.resolve(__dirname, 'app')
Hangisi tercih edilmeli?
Aşağıdaki çağrılar arasında bir fark var mı?
path.join(__dirname, 'app')
vs.
path.resolve(__dirname, 'app')
Hangisi tercih edilmeli?
Yanıtlar:
İki işlev /çok farklı şekillerde başlayan bölümlerle ilgilenir ; joinyalnızca önceki bağımsız değişkenle birleştirir, ancak resolvebunu kök dizin olarak ele alır ve önceki tüm yolları yoksayar - cdher bağımsız değişkenle yürütmenin sonucu olarak düşünün :
path.join('/a', '/b') // Outputs '/a/b'
path.resolve('/a', '/b') // Outputs '/b'
Dikkat edilmesi gereken başka bir şey path.resolve, her zaman mutlak bir URL ile sonuçlanacağı ve bu dizini çözmek için çalışma dizininizi temel olarak kullanacağıdır. Ama __dirnameyine de mutlak bir yol olduğu gibi , bu sizin durumunuzda önemli değil.
Hangisini kullanmanız gerektiği konusunda, cevap şudur: bu, başlangıçta başlayan segmentlerin nasıl /davranmasını istediğinize bağlıdır - basitçe birleştirilmeli mi yoksa yeni kök olarak mı davranmalılar?
Diğer argümanlar sabit kodlanmışsa, gerçekten önemli değil, bu durumda (a) bu satırın gelecekte nasıl değişebileceğini ve (b) koddaki diğer yerlerle ne kadar tutarlı olduğunu düşünmelisiniz.
path.join('/a', '/b', 'c')geri döner /a/b/c, path.resolve('/a', '/b', 'c')geri döner /b/c.
resolveen açık değil, path.cd([starting dir], [final dir])çok daha sezgisel olacağını söyleyebilirim .
think of it as the result of executing cd with each argumentBana nihayet bunu anlamak yaptı. Teşekkürler
Dosya sistemi yolunun varsayılan işlemleri, işletim sistemine bağlı olarak onu soyutlayan bir şeye ihtiyacımız var. pathModül dosya ve dizin yolları ile çalışmak için yardımcı programları veya API sağlar. kullanarak projenize ekleyebilirsiniz
const path = require('path');
path.joinVe path.resolveyol modülünün iki farklı yöntem vardır.
Her iki yöntem de bir dizi yolu veya yol parçasını kabul eder.
path.resolve()Yöntem, içine yolları veya yol bölümlerinin bir sırasını giderir mutlak yol .
path.join()Usul, sonra, bir araya sınırlayıcı olarak platforma özel bir ayırıcı kullanarak verilen tüm yol parçalarını birleştiren elde edilen yol normalleştirir.
Davranışları daha iyi anlamak ve farklılaştırmak için, bunu farklı senaryolarla açıklayayım.
1. Dize için herhangi bir argüman sağlamazsak
benim durumumda, dosya adım index.jsve geçerli çalışma diziniE:\MyFolder\Pjtz\node
const path = require('path');
console.log("path.join() : ", path.join());
// outputs .
console.log("path.resolve() : ", path.resolve());
// outputs current directory or equalent to __dirname of the node process
ve koşu sonucu aşağıdaki gibidir
λ node index.js
path.join() : .
path.resolve() : E:\MyFolder\Pjtz\node
Yukarıdaki deneyden çıkarım bu path.resolve()yöntem mutlak yolun çıktı olarak path.join()döndürülmesidir. hiçbir şey sağlanmamışsa geçerli çalışma dizinini veya göreli yolu temsil eder
2. Bağımsız değişkenlerden herhangi biri olarak bir / yol ekleme.
const path=require('path');
console.log("path.join() : " ,path.join('abc','/bcd'));
console.log("path.resolve() : ",path.resolve('abc','/bcd'));
ve sonuç
λ node index.js
path.join() : abc\bcd
path.resolve() : E:\bcd
Bu deneyde bulabileceğimiz çıkarım path.join(), giriş listesini yalnızca platforma özgü ayırıcı ile birleştirirken, path.resolve()işlem dizisi sağdan sola doğru işlenirken, sonraki her yol mutlak bir yol oluşturuluncaya kadar önceden eklenir.
path.join()her bağımsız değişkeni işletim sistemine özgü ayırıcılar ile birleştirirken, her bağımsız path.resolve()değişkeni root ile üretir ve çıktı üretir.
path.resolve()olduğu eşdeğer değildir için __dirname. Birincisi çalışma dizinini, ikincisi ise geçerli dosyanın yolunu döndürür.
const path = require('path'); console.log(path.resolve()) console.log(__dirname) console.log(path.resolve()===__dirname)
path.resolve() is equivalent to __dirname
1) path.resolve mutlak yolu oluşturur.
Yöntem, mutlak bir yol oluşturuluncaya kadar sağdan sola absoulte yolu oluşturur .
Örneğin:
path.resolve('/a', 'b', 'c'); // C:\a\b\c
path.resolve('/a', '/b', 'c'); // C:\b\c
path.resolve('/a', '/b', '/c'); // C:\c
Mutlak yol oluşturulmazsa, geçerli çalışma dizinini kullanan yöntem:
Örneğin:
path.resolve('a', 'b', 'c'); // C:\{current_working_directory}\a\b\c
2) path.join tüm yola katılır ve sonucu normalleştirir
Örneğin:
path.join('/a', '/b', '/c'); // \a\b\c
path.join('/a', '/b', 'c'); // \a\b\c
path.join('/a', 'b', 'c'); // \a\b\c
path.join('a', 'b', 'c'); // \a\b\c
path.join('a','b','c')bunun sonucunu vermelidir a\b\c.