Node.js - Tìm thư mục chính theo cách bất khả tri của nền tảng


214

Process.pl platform trả về "win32" cho Windows. Trên Windows, thư mục chính của người dùng có thể là C: \ Users [USERNAME] hoặc C: \ Documents and Settings [USERNAME] tùy thuộc vào phiên bản Windows nào đang được sử dụng. Trên Unix đây không phải là một vấn đề.


Mac OS X có giữ lại phương thức Unix hay nó cũng yêu cầu một cái gì đó khác biệt?
hà mã

2
@hippietrail Mac OS X sử dụng HOME như mọi Unix khác.
Marnen Laibow-Koser

Câu trả lời:


330

Như đã đề cập trong một câu trả lời gần đây hơn , cách ưa thích bây giờ chỉ đơn giản là:

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

[Câu trả lời gốc] : Tại sao không sử dụng USERPROFILEbiến môi trường trên win32?

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

Cảm ơn bạn. Chỉ cần cài đặt Node.js cục bộ, vì việc xây dựng một máy chủ cơ bản trên Cloud9 không tuân theo hướng dẫn nhỏ của tôi (tất nhiên) ... và KHÔNG CÓ IDEA nơi để đặt các tệp của tôi. Bạn là người đàn ông! (Tôi giả sử)
Steve

Trong 0.10.33 thắng 64 bit, điều này không hoạt động. Tôi có USERPROFILE và HOME được đặt thành C: Công ty của tôi buộc tôi phải cài đặt HOMEDRIVE / HOMEPATH cho mạng chia sẻ H :. Đối với một số lý do nút thích H :.
Angus

9
Tôi có một phản ứng tiêu cực về mặt câu trả lời này và câu trả lời phổ biến thứ hai. Nếu bạn đang sử dụng node.js, thì IMHO, bạn nên ưu tiên các mô-đun npm như os.homedir () và osenv.home () (cả hai được đề cập dưới đây). Nếu bạn nhìn vào nguồn cho os.homedir (), bạn sẽ thấy rằng nó không đơn giản.
Larry Maccherone

Đây không phải là một nền tảng bất khả tri.
Michael

gói a path.resolve()có thể cung cấp một số chuẩn hóa về dấu gạch chéo, dấu gạch chéo ngược / ngược có khả năng kỳ lạ, v.v ... (đặc biệt là nếu bạn có các thao tác tệp trong tâm trí, sau khi nhận được thông tin này)
Frank Nocke

237

os.homedir()đã được thêm vào bởi PR này và là một phần của bản phát hành công khai 4.0.0 của nodejs.


Ví dụ sử dụng:

const os = require('os');

console.log(os.homedir());

Chào mừng bạn đến với Stack Overflow! Hãy chắc chắn để diễn đạt câu trả lời của bạn như một câu trả lời , không phải là một câu hỏi.
durron597

2
Hiểu rồi. Thêm nguồn vì os.homedir()là một đồ chơi mới khá buồn tẻ.
Cody Allan Taylor

8
nên được chấp nhận câu trả lời vì nó là nền tảng chéo tương thích
Yahya Uddin

2
Bạn cần phải thêm const os = require('os');quá
Roel

81

Chà, sẽ chính xác hơn nếu dựa vào tính năng chứ không phải giá trị biến. Đặc biệt là có 2 biến có thể cho Windows.

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

EDIT : như đã đề cập trong một câu trả lời gần đây hơn, https://stackoverflow.com/a/32556337/103396 là cách đúng đắn để đi ( require('os').homedir()).


1
Trên máy Windows 7 của tôi, HOMEPATH và USERPROFILE trả lại cùng một thứ (C: \\ Users \ Tên người dùng). HOME trả về không xác định. Trên Mac HOME của tôi trả về / Người dùng / Tên người dùng và HOMEPATH và USERPROFILE trả lại không xác định.
Ben Clayton

1
trên máy tính windows 7 của tôi, HOMEPATH trả về \users\namevà USERPROFILE có c:\users\name. Vì vậy, phương pháp này không chính xác và mạnh mẽ như @maerics '
PA.


0
getUserRootFolder() {
  return process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.