Câu trả lời:
Thử cái này:
fs.readFile(__dirname + '/../../foo.bar');
Lưu ý dấu gạch chéo phía trước ở đầu đường dẫn tương đối.
__dirname
thích '/foo/bar'
hơn là '/foo/bar/'
.
__dirname
có thể trông như thế /path/to/your/dir
, nếu bạn nói __dirname + ".."
nó là /path/to/your/dir..
, đó là một thư mục không tồn tại, chứ không phải là /path/to/your
. Dấu gạch chéo là quan trọng.
Sử dụng 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()
sẽ xử lý các dấu gạch chéo hàng đầu / dấu vết cho bạn và chỉ cần thực hiện đúng và bạn không phải cố gắng nhớ khi nào dấu gạch chéo tồn tại và khi nào thì không.
path.join
là cách chính xác, câu trả lời được chấp nhận không nên đi theo, nó thậm chí còn gây nên eslint
trên airbnb-base preset
, các quy tắc không-đường-concat đặc biệt
__dirname
đã host/src/folder
và tôi cần host/folder
và điều này làm việc cho tôi, không phải câu trả lời của OP.
path.join(__dirname, '..', '..', 'foo.bar')
Tôi biết nó hơi kén chọn, nhưng tất cả các câu trả lời cho đến nay không hoàn toàn đúng.
Điểm của path.join () là loại bỏ sự cần thiết của người gọi để biết nên sử dụng trình phân tách thư mục nào (làm cho nền tảng mã hóa bất khả tri).
Về mặt kỹ thuật, câu trả lời đúng sẽ là một cái gì đó như:
var path = require("path");
fs.readFile(path.join(__dirname, '..', '..', 'foo.bar'));
Tôi đã có thể thêm điều này như một nhận xét cho câu trả lời của Alex Wayne nhưng chưa đủ đại diện!
EDIT: theo quan sát của người dùng1767586
Cách dễ nhất sẽ là sử dụng path.resolve
:
path.resolve(__dirname, '..', '..');
../
vào đường dẫn
Có vẻ như bạn sẽ cần path
mô-đun. ( path.normalize
đặc biệt)
var path = require("path"),
fs = require("fs");
fs.readFile(path.normalize(__dirname + "/../../foo.bar"));
Nếu một mô-đun khác gọi cho bạn và bạn vẫn muốn biết vị trí của tệp chính đang chạy, bạn có thể sử dụng sửa đổi mã của @ Jason:
var path = require('path'),
__parentDir = path.dirname(process.mainModule.filename);
fs.readFile(__parentDir + '/foo.bar');
Bằng cách đó, bạn sẽ có được vị trí của tập lệnh thực sự đang được chạy.
Nếu bạn không tích cực về nơi cha mẹ đang ở, điều này sẽ giúp bạn có con đường;
var path = require('path'),
__parentDir = path.dirname(module.parent.filename);
fs.readFile(__parentDir + '/foo.bar');
Tôi đang chạy ứng dụng điện tử và tôi có thể lấy thư mục mẹ bằng path.resolve ()
phụ huynh 1 cấp:path.resolve(__dirname, '..') + '/'
cha mẹ 2 cấp:path.resolve(__dirname, '..', '..') + '/'
fs.readFile(__dirname + '/../../foo.bar');
và nó đã làm việc.