Відповіді:
Спробуйте це:
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');і це спрацювало.