楽しいだけで十分です

Node.jsのpath指定の方法を整理する

Node.jsでpath指定する方法をよく忘れるので、path指定する時に使う知識を整理します。

動作確認は、以下の前提で行っています。

OS: MacOS
Node.js: 14.15.0

Node.jsで.を使用してpath指定した場合の挙動

基本

terminalなどでnodeコマンドを実行したディレクトリを示します。

// カレントディレクトリ:  /Users/yourname/misc/node-path
// 実行コマンド: node dot/index.js

path.resolve(".")
// =>  /Users/yourname/misc/node-path
// カレントディレクトリ:  /Users/yourname/misc/node-path
// 実行コマンド: node dot/dir1/index.js

path.resolve(".")
// =>  /Users/yourname/misc/node-path

例外

require()の引数に.を使用した場合です。この場合は、require()を記述したファイルからの相対パスになります。

ディレクトリ構成

require/
├── index.js
└── log.js

log.js

module.exports = () => {
  console.log("hello from log.js");
};

index.js

// カレントディレクトリ:  /Users/yourname/misc/node-path
// 実行コマンド: node require/index.js

const log = require("./log");
log();
// => hello from log.js

pathを結合する方法

path.join()を使います。

単純な文字列結合ではなく、path.join()を使うのは、以下のメリットがあるためです。

  • プラットフォーム特有の区切り文字(e.g. Windowsなら\, POSIXなら /)を使用して結合する
  • 区切り文字がダブったり不足したりすることを避ける

関連するAPI

path.join([...paths])

引数に渡したpathの構成要素を、プラットフォーム特有の区切り文字で結合し、結果のパスを返します。

引数

  • ...paths <string>

    • pathの構成要素 (先頭から順に結合する)

返り値

  • <string>

    • pathの構成要素の結合結果
// カレントディレクトリ:  /Users/yourname/misc/node-path
// 実行コマンド: node path-join/index.js

path.join("")
// =>  .

path.join("", "src")
// =>  src

path.join(__dirname)
// =>  /Users/yourname/misc/node-path/path-join

path.join(__dirname, "../src")
// =>  /Users/yourname/misc/node-path/src

__dirname

現在のモジュール(__dirnameを記述したファイル)のディレクトリ名を返します。

path.dirname(__filename)と同じに結果になります。

返り値

  • <string>
// カレントディレクトリ:  /Users/yourname/misc/node-path
// 実行コマンド: node dirname/index.js

__dirname
// =>  /Users/yourname/misc/node-path/dirname

参考

yinm

WRITTEN BY yinm

I'm a Frontend Engineer.