Node __dirname не определено
В руководстве node я вижу, что я могу получить каталог файла с __dirname
, но из REPL это выглядит как undefined. Это недоразумение на моей стороне или где ошибка?
$ node
> console.log(__dirname)
ReferenceError: __dirname is not defined
at repl:1:14
at REPLServer.eval (repl.js:80:21)
at Interface.<anonymous> (repl.js:182:12)
at Interface.emit (events.js:67:17)
at Interface._onLine (readline.js:162:10)
at Interface._line (readline.js:426:8)
at Interface._ttyWrite (readline.js:603:14)
at ReadStream.<anonymous> (readline.js:82:12)
at ReadStream.emit (events.js:88:20)
at ReadStream._emitKey (tty.js:320:10)
Ответы
Ответ 1
__dirname
определяется только в сценариях. Он не доступен в REPL.
попробуйте сделать script a.js
console.log(__dirname);
и запустите его:
node a.js
вы увидите __dirname
.
Добавленное описание фона: __dirname
означает "Каталог этого script". В REPL у вас нет script. Следовательно, __dirname
не имеет никакого реального значения.
Ответ 2
Основываясь на существующих ответах здесь, вы можете определить это в своем REPL:
__dirname = path.resolve(path.dirname(''));
Или:
__dirname = path.resolve();
Если сегменты пути не пройдены, path.resolve() вернет абсолютный путь к текущему рабочему каталогу.
Или альтернативы @Jthorpe:
__dirname = process.cwd();
__dirname = fs.realpathSync('.');
__dirname = process.env.PWD
Ответ 3
Как сказал @qiao, вы не можете использовать __dirname
в реплике node. Однако, если вам нужно это значение в консоли, вы можете использовать path.resolve()
или path.dirname()
. Хотя path.dirname()
просто даст вам "." поэтому, возможно, не так полезно. Обязательно require('path')
.
Ответ 4
Хотя это не решение этой проблемы, я хотел бы добавить ее, поскольку она может помочь другим.
У вас должно быть два символа подчеркивания перед именем dirname, не одним нижним числом (__dirname
not _dirname).
http://nodejs.org/docs/latest/api/globals.html#globals_dirname
Ответ 5
Похоже, вы тоже можете это сделать:
__dirname=fs.realpathSync('.');
конечно, не забывайте fs=require('fs')
(он не является действительно глобальным в node сценариях точно, его только что определен на уровне модуля)