Node.js - Platformunu agnostik şekilde bul


215

Process.platform, Windows için "win32" değerini döndürür. Windows'ta, kullanıcının hangi sürümü kullanıldığına bağlı olarak kullanıcının ana dizini C: \ Kullanıcılar [USERNAME] veya C: \ Documents and Settings [USERNAME] olabilir. Unix'te bu bir sorun değil.


Mac OS X, Unix yöntemini koruyor mu veya farklı bir şey gerektiriyor mu?
hippietrail

2
@hippietrail Mac OS X, HOME'u diğer tüm Unix'ler gibi kullanır.
Marnen Laibow-Koser

Yanıtlar:


331

Daha yeni bir cevapta belirtildiği gibi , tercih edilen yol artık basitçe:

const homedir = require('os').homedir();

[Original Answer] : Neden USERPROFILEwin32'de ortam değişkenini kullanmıyorsunuz ?

function getUserHome() {
  return process.env[(process.platform == 'win32') ? 'USERPROFILE' : 'HOME'];
}

Teşekkür ederim. Cloud9 üzerinde temel bir sunucu oluşturmak benim küçük öğretici (tabii ki) takip etmiyor gibi Node.js yerel olarak yükledi ... ve benim dosyaları koymak için hiçbir IDEA vardı. Adamsın! (Sanırım)
Steve

0.10.33 kazanmak 64bit bu işe yaramaz. USERPROFILE ve HOME'u C olarak ayarladım: Şirketim beni bir HOMEDRIVE / HOMEPATH ağ paylaşımına H: ayarlamaya zorluyor. Bazı nedenlerden dolayı düğüm H: 'yi tercih eder.
Angus

9
Bu yanıta ve en popüler ikinci yanıta içgüdüsel olarak olumsuz bir reaksiyonum var. Node.js kullanıyorsanız, IMHO kullanıyorsanız, os.homedir () ve osenv.home () (her ikisi de aşağıda belirtilmiştir) gibi npm modüllerini tercih etmelisiniz. Eğer os.homedir () kaynağına bakarsanız, bunun bu kadar basit olmadığını göreceksiniz.
Larry Maccherone

Bu platform agnostik bir araç değildir.
Michael

sarmak path.resolve() / potansiyel garip ileri, sondaki eğik çizgi açısından bazı normalleşmesini sağlayabilir vb ... (bu bilgi aldıktan sonra, akılda dosya işlemlerini var özellikle) tersbölüleri,
Frank Nocke

237

os.homedir()bu PR tarafından eklendi ve nodejs'ün 4.0.0 genel sürümünün bir parçasıdır.


Örnek kullanım:

const os = require('os');

console.log(os.homedir());

Stack Overflow'a hoş geldiniz! Lütfen cevabınızı soru olarak değil cevap olarak ifade ettiğinizden emin olun .
durron597

2
Anladım. Kaynaklar eklendi çünkü os.homedir()oldukça darn yeni bir oyuncak.
Cody Allan Taylor

8
çapraz platform uyumlu olduğu için cevap kabul edilmelidir
Yahya Uddin

2
Sen eklemeniz gerekir const os = require('os');de
Roel

81

Değişken bir değere değil, özelliğe güvenmek daha doğru olur. Özellikle Windows için 2 olası değişken olduğu için.

function getUserHome() {
  return process.env.HOME || process.env.USERPROFILE;
}

EDIT : daha yeni bir cevapta belirtildiği gibi, https://stackoverflow.com/a/32556337/103396 gitmek için doğru yoldur ( require('os').homedir()).


1
Windows 7 makinemde, HOMEPATH ve USERPROFILE aynı şeyi döndürüyor (C: \\ Kullanıcılar \\ Kullanıcı Adı). HOME tanımsız olarak döner. Mac bilgisayarımda HOME / Users / Kullanıcı Adı ve HOMEPATH ve USERPROFILE döndürmeleri tanımsız olarak döner.
Ben Clayton

1
Windows 7 makinemde HOMEPATH döner \users\nameve USERPROFILE vardır c:\users\name. Dolayısıyla bu yöntem @maerics '
PA


0
getUserRootFolder() {
  return process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE;
}
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.