Sự khác biệt giữa process.cwd () so với __dirname là gì?


303

Sự khác biệt giữa

console.log(process.cwd())

console.log(__dirname);

Tôi đã thấy cả hai được sử dụng trong bối cảnh tương tự.

Câu trả lời:


486

process.cwd() trả về thư mục làm việc hiện tại,

tức là thư mục mà bạn đã gọi nodelệnh.

__dirname trả về tên thư mục của thư mục chứa tệp mã nguồn JavaScript


5
Điều này có nghĩa process.cwd()là đồng nghĩa .với tất cả các trường hợp ngoại trừ require()?
Alexander Gonchiy

10
@AlexanderGonchiy đúng, .có liên quan đến process.cwd()(vì vậy đồng nghĩa), ngoại trừ require()hoạt động liên quan đến tệp thực thi hiện tại. Xem ở đây để biết thêm.
dwelle

1
Lưu ý rằng thư mục làm việc hiện tại có thể được thay đổi trong thời gian chạy bằng process.chdir, vì vậy nó không phải luôn luôn là thư mục mà nút được gọi.
masterxilo

85

Theo tài liệu js nút process.cwd()

cwdlà một phương thức của đối tượng toàn cục process, trả về một giá trị chuỗi là thư mục làm việc hiện tại của quy trình Node.js.

Theo tài liệu js nút __dirname

Tên thư mục của tập lệnh hiện tại dưới dạng giá trị chuỗi. __dirname không thực sự là toàn cầu mà là cục bộ cho mỗi mô-đun.

Hãy để tôi giải thích với ví dụ,

giả sử chúng ta có một main.jstệp nằm bên trong C:/Project/main.js và chạy node main.jscả hai giá trị này trả về cùng một tệp

hoặc đơn giản với cấu trúc thư mục sau

Project 
├── main.js
└──lib
   └── script.js

main.js

console.log(process.cwd())
// C:\Project
console.log(__dirname)
// C:\Project
console.log(__dirname===process.cwd())
// true

giả sử chúng ta có một tệp tệp khác script.jstrong một thư mục con của dự án tức là C:/Project/lib/script.jsvà đang chạy node main.jsyêu cầuscript.js

main.js

require('./lib/script.js')
console.log(process.cwd())
// C:\Project
console.log(__dirname)
// C:\Project
console.log(__dirname===process.cwd())
// true

script.js

console.log(process.cwd())
// C:\Project
console.log(__dirname)
// C:\Project\lib
console.log(__dirname===process.cwd())
// false

9

Biết phạm vi của mỗi có thể làm cho mọi thứ dễ nhớ hơn.

processnodeđối tượng toàn cầu và .cwd()trả về nơi nút đang chạy.

__dirnamelà thuộc moduletính và đại diện cho đường dẫn tệp của mô-đun. Trong nút, một mô-đun nằm trong một tệp.

Tương tự, __filenamelà thuộc tính của người khác module, chứa tên tệp của mô-đun.


0

$ find proj

proj
proj/src
proj/src/index.js

$ cat proj/src/index.js

console.log("process.cwd() = " + process.cwd());
console.log("__dirname = " + __dirname);

$ cd proj; node src/index.js

process.cwd() = /tmp/proj
__dirname = /tmp/proj/src
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.