2012-03-18 25 views
108

herkesin bildiği gibi, Windows unix'in eğik çizgileri olan yolları yaptığı ters eğik çizgi olan yolları yapar. Node.js, her zaman doğru eğik çizgiyi kullanmak için path.join() sağlar. Yani örneğin unix'i sadece 'a/b/c' yazmak yerine bunun yerine path.join('a','b','c') yaparsınız.Node.js'de path.join kullanmanız gerekiyor mu?

Ancak ... bu farka rağmen (örn path.join kullanarak) ve sadece a/b/c node.js gibi yollar yazma Yollarınızı normalleştirmek yoksa görünüyor pencerelerde senaryolarınızı çalışan bir problemi yok

üzerinden path.join('a','b','c') yazımı üzerinde herhangi bir fayda var mı? her ikisi de platformdan bağımsız olarak çalışır gibi görünür ...

cevap

90

, Windows dosya sistemleri (bu geri DOS günlerde beri olduğu yol ayırıcı olarak veya arkaya eğik çizgi kullanarak sorunum yok www ve test arasında ayırıcı eklemek Will). Tek gerçek sorun, Windows komut satırı işlemcilerinin (veya daha özel olarak Windows yerel komut satırı yardımcı programlarının), eğik çizgileri, yol bileşenleri yerine seçenek belirteçleri olarak yorumlama eğiliminde olmalarıdır. Bu nedenle, bir alt yordam olarak çalışan bir Windows komutuna bir yolu iletmeniz gerekiyorsa, eğik bir yola ihtiyacınız vardır. Ayrıca, Windows API çağrıları (ve Windows API'yi çağıran daha yüksek düzeyli dillerden gelen yöntemler), geri dönüş yolları kullanacaktır, bu yüzden bunları alt işlemlere aktarmıyor olsanız bile, bunları normalleştirmeniz gerekir.

+0

İleri eğimler ayrıca UNC yollarını da kırıyor. – user2426679

40

Klasör ayırıcılarının doğru yerlerden olduğundan emin olmak için paths.join kullanırım. Örneğin:

path.join("/var/www", "test") 

doğru /var/www/test

+1

Bu noktayı anlamıyorum.Değişkenlerde bu komut dosyalarınız varsa, neden elle bir eğik çizgi eklemiyorsunuz? – mgol

+1

Bu cevabı anladığım sıkıntılar da var. Herhangi bir değer göremiyorum. – oligofren

+17

Çünkü diğer kaynaklardan aldığım yol değerlerinin eğik çizgileri olup olmayacağından emin değilim. Yukarıdaki örneğim uyuşturuldu. Genellikle bu yollar sabit kodlanmış değildir, ancak diğer yapılandırma dosyalarından, kullanıcı girdilerinden, kütüphanelerden vb. Çekilirler. –

27

Kısa cevap:

Tüm fs.* fonksiyonları (örn. fs.open, vs) sizin için yol adı davranır. Bu nedenle, path.join'u kullanmanız ve kodunuzu okunamaz hale getirmeniz gerekmez.

Uzun cevap:

Tüm fs.* fonksiyonları hesap ters eğik çizgi içine alır Windows için özel regexpleri sahiptir dönüş çağrısı path.resolve(path), içinde \ veya ileri / eğik path._makeLong(path), çağrı

. Verilen Pathes gelirse oluşabilir ki

73

path.join gereksiz sınırlayıcı ilgilenir: Sen kendi kaynak kodunu arayan kendiniz kontrol edebilirsiniz bilinmeyen kaynaklardan (örn. kullanıcı girişi, 3. taraf API'ları vb.).

Yani path.join('a/','b')path.join('a/','/b'), path.join('a','b') ve path.join('a','/b') tüm a/b verecektir.

Kullanmadan önce, genellikle yalnızca bir ya da bir eğik çizgiye sahip olduklarını bilerek, birleştirilen yolların başlangıç ​​ve bitişiyle ilgili beklentileriniz olur.

İlgili konular