Câu trả lời:
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
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
Biết phạm vi của mỗi có thể làm cho mọi thứ dễ nhớ hơn.
processlà nodeđố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.
$ 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
process.cwd()là đồng nghĩa.với tất cả các trường hợp ngoại trừrequire()?