Jawaban:
Coba ini:
fs.readFile(__dirname + '/../../foo.bar');
Perhatikan garis miring di awal jalur relatif.
__dirname
itu adalah sesuatu seperti '/foo/bar'
bukan '/foo/bar/'
.
__dirname
mungkin terlihat seperti /path/to/your/dir
, jika Anda mengatakan __dirname + ".."
itu /path/to/your/dir..
, yang merupakan direktori tidak ada, bukan /path/to/your
. Tebasan itu penting.
Gunakan 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()
akan menangani garis miring / garis depan untuk Anda dan hanya melakukan hal yang benar dan Anda tidak perlu mencoba mengingat ketika garis garis miring ada dan ketika garis miring tidak ada.
path.join
cara yang benar, jawaban yang diterima tidak harus diikuti, bahkan memicu eslint
pada airbnb-base preset
, aturan tidak ada jalan-concat khususnya
__dirname
adalah host/src/folder
dan saya butuhkan host/folder
dan ini bekerja untuk saya, bukan jawaban OP.
path.join(__dirname, '..', '..', 'foo.bar')
Saya tahu ini agak pilih-pilih, tetapi semua jawaban sejauh ini kurang tepat.
Titik path.join () adalah untuk menghilangkan kebutuhan pemanggil untuk mengetahui pemisah direktori mana yang harus digunakan (membuat platform kode agnostik).
Secara teknis jawaban yang benar adalah:
var path = require("path");
fs.readFile(path.join(__dirname, '..', '..', 'foo.bar'));
Saya akan menambahkan ini sebagai komentar untuk jawaban Alex Wayne tetapi belum cukup perwakilan!
EDIT: sesuai observasi user1767586
Cara termudah adalah menggunakan path.resolve
:
path.resolve(__dirname, '..', '..');
../
ke path
Sepertinya Anda akan membutuhkan path
modul. ( path.normalize
khususnya)
var path = require("path"),
fs = require("fs");
fs.readFile(path.normalize(__dirname + "/../../foo.bar"));
Jika modul lain memanggil modul Anda dan Anda masih ingin tahu lokasi file utama sedang dijalankan, Anda dapat menggunakan modifikasi kode @ Jason:
var path = require('path'),
__parentDir = path.dirname(process.mainModule.filename);
fs.readFile(__parentDir + '/foo.bar');
Dengan begitu Anda akan mendapatkan lokasi skrip benar-benar dijalankan.
Jika Anda tidak positif di mana orang tua berada, ini akan memberi Anda jalan;
var path = require('path'),
__parentDir = path.dirname(module.parent.filename);
fs.readFile(__parentDir + '/foo.bar');
Saya menjalankan aplikasi elektron dan saya bisa mendapatkan folder induk dengan path.resolve ()
level induk 1:path.resolve(__dirname, '..') + '/'
level induk 2:path.resolve(__dirname, '..', '..') + '/'
ini juga akan berfungsi:
fs.readFile(`${__dirname}/../../foo.bar`);
fs.readFile(__dirname + '/../../foo.bar');
dan berhasil.