path.resolve против относительного пути в Node.js ?

#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 интерфейса, имеет значение, откуда выполняется скрипт? Потому что я привык думать, что все относительно файла, в котором я сейчас пишу.