Как и когда использовать __dirname, process.cwd() в Node.js?

May 12, 2018

Есть три пути ссылаться на текущую директорию в Node.js.

  • __dirname - возвращает путь к каталогу текущего исполняемого файла.
  • process.cwd() - возвращает директорию из которой вы запустили Node.js файл.
  • (./ и ../) - относительный путь.

Рассмотрим примеры

myapp/
    app.js
    subdir/
        app.js

В корневой директории

Запустив app.js в корневой директории мы получим:

cd /tmp/myapp
node app.js
__dirname (the directory of the script file): /tmp/myapp
process.cwd() (the directory from which the script file was called): /tmp/myapp

Во вложенной директории

Запустив вложенный app.js из поддиректории мы получим:

cd subdir/
node app.js
__dirname (the directory of the script file): /tmp/myapp/subdir
process.cwd() (the directory from which the script file was called): /tmp/myapp/subdir

Снова, мы не видим разницы.

Выполним скрипт в каталоге, отличном от текущего каталога

Запустив корневой app.js из поддиретории мы получим:

$ node ../app.js
__dirname (the directory of the script file): /tmp/myapp
process.cwd() (the directory from which the script file was called): /tmp/myapp/subdir

Сейчас, как видите, __dirname отличается от process.cwd(), поскольку __dirname использует локацию выполняемого скрипта (файла), который находится в директории отличной от текущей директории.

Другие пути обращаться с директориям Node.js

  • (./ и ../) - ссылается на директорию, в кторой вы запустили Node команду.
  • process.cwd() - ссылается на директорию, в кторой вы запустили Node команду.

./ - дает вам каталог, из которого вы запустили команду Node (то есть аналогично process.cwd(), но...): исключением является использование ./ с require(). Путь внутри require всегда относится к файлу, содержащему вызов require.

Добавить комментарий
Комментарии:
ываываыва
May 26, 2018
ываыва