Відповіді:
Спробуйте це:
fs.readFile(__dirname + '/../../foo.bar');
Зверніть увагу на пересічку вперед на початку відносного шляху.
__dirname
було щось подібне, '/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()
буде обробляти провідні / задні косої риски для вас і просто робити правильно, і вам не потрібно намагатися запам’ятовувати, коли існують кінці косої риси та коли вони не роблять.
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'));
Я додав би це як коментар до відповіді Алекса Вейна, але поки недостатньо реп!
EDIT: відповідно до спостереження користувача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.resolve ()
батьківський рівень 1:path.resolve(__dirname, '..') + '/'
батьківський рівень 2:path.resolve(__dirname, '..', '..') + '/'
це також буде працювати:
fs.readFile(`${__dirname}/../../foo.bar`);
fs.readFile(__dirname + '/../../foo.bar');
і це спрацювало.