#javascript #node.js #path
#javascript #node.js #путь
Вопрос:
Я часто вижу примеры в node, такие как:
process.env.GOOGLE_APPLICATION_CREDENTIALS = path.resolve(__dirname, 'credentials.json')
Я понимаю, что path
это полезный модуль при работе с более сложными ситуациями, но в этом случае, почему бы просто не использовать
process.env.GOOGLE_APPLICATION_CREDENTIALS = './credentials.json'
?
Комментарии:
1. Это зависит от того, как вы используете эту переменную. Относительный путь — это отношение к рабочему каталогу, которое может быть изменено способом запуска вашего приложения node или программным путем.
2.
process.chdir('/go/find/your/credentials/now')
Ответ №1:
Из документации:
Имя каталога текущего модуля. Это то же самое, что path.dirname() для __filename .
Это означает, что при использовании этого:
process.env.GOOGLE_APPLICATION_CREDENTIALS = './credentials.json'
NodeJS будет искать credentials.json
в текущем рабочем каталоге
В то время как при использовании этого:
process.env.GOOGLE_APPLICATION_CREDENTIALS = path.resolve(__dirname, 'credentials.json')
NodeJS будет искать credentials.json
в том же каталоге, где находится этот модуль
Допустим, у вас есть структура каталогов, подобная этой:
/
-- home
| -- USERNAME
| -- project
| -- index.js
| -- credentials.json
если вы выполните следующие команды (из корневого каталога /
):
cd home/USERNAME/project
node index.js
Код будет работать просто отлично в обоих случаях.
Но если вы запустите его следующим образом
node home/USERNAME/project/index.js
С помощью path.resolve
вы получите: home/USERNAME/project/credentials.json
что правильно
и без этого вы получите: ./credentials.json
, что неверно, поскольку ваш текущий каталог является /
.
Комментарии:
1. О’кей, значит, в node, по сравнению с JS интерфейса, имеет значение, откуда выполняется скрипт? Потому что я привык думать, что все относительно файла, в котором я сейчас пишу.