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の構成要素 (先頭から順に結合する)
返り値
-
- 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