ฉันจะเขียนสิ่งนี้เพื่อสำรองระดับพาเรนต์ 2 เพื่อค้นหาไฟล์ได้อย่างไร
fs.readFile(__dirname + 'foo.bar');
ฉันจะเขียนสิ่งนี้เพื่อสำรองระดับพาเรนต์ 2 เพื่อค้นหาไฟล์ได้อย่างไร
fs.readFile(__dirname + 'foo.bar');
คำตอบ:
ลองสิ่งนี้:
fs.readFile(__dirname + '/../../foo.bar');
หมายเหตุเครื่องหมายสแลชที่จุดเริ่มต้นของพา ธ สัมพัทธ์
__dirname
ถูก Somthing ชอบมากกว่า'/foo/bar'
'/foo/bar/'
__dirname
อาจมีลักษณะเช่น/path/to/your/dir
ถ้าคุณบอกว่า__dirname + ".."
มันเป็นเรื่องซึ่งเป็นไดเรกทอรีที่ไม่มีอยู่มากกว่า/path/to/your/dir..
/path/to/your
การเฉือนเป็นสิ่งสำคัญ
ใช้ path.join http://nodejs.org/docs/v0.4.10/api/path.html#path.join
var path = require("path"),
fs = require("fs");
fs.readFile(path.join(__dirname, '..', '..', 'foo.bar'));
path.join()
จะจัดการกับ slashes ชั้นนำ / ต่อท้ายสำหรับคุณและเพียงทำสิ่งที่ถูกต้องและคุณไม่ต้องพยายามจำเมื่อมีการต่อท้าย slashes อยู่และเมื่อพวกเขาไม่
path.join
วิธีที่ถูกต้องคำตอบที่ได้รับการยอมรับไม่ควรจะปฏิบัติตามก็ยังเป็นต้นเหตุeslint
ในairbnb-base preset
กฎไม่มีเส้นทาง concatโดยเฉพาะอย่างยิ่ง
__dirname
เป็นhost/src/folder
และฉันต้องการhost/folder
และทำงานสำหรับฉันไม่ได้คำตอบสหกรณ์
path.join(__dirname, '..', '..', 'foo.bar')
ฉันรู้ว่ามันค่อนข้างพิถีพิถัน แต่คำตอบทั้งหมดจนถึงตอนนี้ยังไม่ถูกต้องนัก
จุดของ path.join () คือการกำจัดความต้องการของผู้โทรที่จะรู้ว่าตัวแยกไดเรกทอรีที่จะใช้ (ทำแพลตฟอร์มรหัสไม่เชื่อเรื่องพระเจ้า)
ในทางเทคนิคแล้วคำตอบที่ถูกต้องน่าจะเป็น:
var path = require("path");
fs.readFile(path.join(__dirname, '..', '..', 'foo.bar'));
ฉันจะเพิ่มสิ่งนี้เป็นความคิดเห็นในคำตอบของ Alex Wayne แต่ยังไม่พอตัวแทน!
แก้ไข: ตามข้อสังเกตของผู้ใช้ 1767586
วิธีที่ง่ายที่สุดคือใช้path.resolve
:
path.resolve(__dirname, '..', '..');
../
เส้นทาง
ดูเหมือนว่าคุณจะต้องมีpath
โมดูล ( path.normalize
โดยเฉพาะ)
var path = require("path"),
fs = require("fs");
fs.readFile(path.normalize(__dirname + "/../../foo.bar"));
หากโมดูลอื่นโทรหาคุณและคุณยังต้องการทราบตำแหน่งของไฟล์หลักที่กำลังทำงานอยู่คุณสามารถใช้การแก้ไขโค้ดของ @ Jason:
var path = require('path'),
__parentDir = path.dirname(process.mainModule.filename);
fs.readFile(__parentDir + '/foo.bar');
ด้วยวิธีนี้คุณจะได้ตำแหน่งของสคริปต์ที่ใช้งานจริง
หากคุณไม่แน่ใจว่าผู้ปกครองอยู่ในที่ใดสิ่งนี้จะทำให้คุณได้รับเส้นทาง
var path = require('path'),
__parentDir = path.dirname(module.parent.filename);
fs.readFile(__parentDir + '/foo.bar');
คุณสามารถใช้ได้
path.join(__dirname, '../..');
ฉันใช้แอพอิเล็กตรอนและฉันสามารถเรียกดูพาเรนต์โฟลเดอร์ได้โดย path.resolve ()
ผู้ปกครอง 1 ระดับ:path.resolve(__dirname, '..') + '/'
ผู้ปกครอง 2 ระดับ:path.resolve(__dirname, '..', '..') + '/'
สิ่งนี้จะได้ผล:
fs.readFile(`${__dirname}/../../foo.bar`);
fs.readFile(__dirname + '/../../foo.bar');
และมันใช้ได้ผล