ส่วนสำคัญ
ใน Node.js __dirnameเป็นไดเรกทอรีที่สคริปต์การดำเนินการอยู่ในปัจจุบันอยู่เสมอ ( ดูสิ่งนี้ ) ดังนั้นถ้าคุณพิมพ์__dirnameลงในค่าที่จะเป็น/d1/d2/myscript.js/d1/d2
โดยคมชัด.ช่วยให้คุณไดเรกทอรีที่คุณวิ่งnodeคำสั่งในหน้าต่าง terminal ของคุณ (เช่นไดเรกทอรีการทำงานของคุณ) เมื่อคุณใช้ห้องสมุดเหมือนและpath fsเทคนิคก็เริ่มออกเป็นไดเรกทอรีการทำงานของคุณ process.chdir()แต่สามารถเปลี่ยนการใช้
ยกเว้นในกรณีที่คุณใช้กับ. require()ภายในเส้นทางอยู่เสมอเมื่อเทียบกับไฟล์ที่มีการเรียกร้องให้requirerequire
ตัวอย่างเช่น...
สมมติว่าโครงสร้างไดเรกทอรีของคุณคือ
/dir1
/dir2
pathtest.js
และpathtest.jsมี
var path = require("path");
console.log(". = %s", path.resolve("."));
console.log("__dirname = %s", path.resolve(__dirname));
และคุณทำ
cd /dir1/dir2
node pathtest.js
คุณได้รับ
. = /dir1/dir2
__dirname = /dir1/dir2
ไดเรกทอรีการทำงานของคุณคือ/dir1/dir2สิ่งที่.แก้ไขได้ เนื่องจากpathtest.jsตั้งอยู่ใน/dir1/dir2นั่นคือสิ่งที่__dirnameจะแก้ไขเช่นกัน
อย่างไรก็ตามหากคุณเรียกใช้สคริปต์จาก /dir1
cd /dir1
node dir2/pathtest.js
คุณได้รับ
. = /dir1
__dirname = /dir1/dir2
ในกรณีดังกล่าวไดเรกทอรีทำงานของคุณเป็น/dir1สิ่งที่.แก้ไขได้ แต่__dirnameยังแก้ไข/dir1/dir2ได้
ใช้.ภายในrequire...
หากภายในdir2/pathtest.jsคุณมีrequireการโทรเข้ารวมไฟล์ภายในdir1ที่คุณจะเสมอทำ
require('../thefile')
เนื่องจากเส้นทางภายในrequireนั้นสัมพันธ์กับไฟล์ที่คุณเรียกใช้อยู่เสมอ มันไม่มีส่วนเกี่ยวข้องกับไดเรกทอรีทำงานของคุณ