path.resolve() はnodeコマンドで実行されてるスクリプトから見たパスを返す
スクリプト内からスクリプトを呼んでるとき、呼ばれた方のスクリプトで path.resolve()
したら、なんか思ってるのと違うものが返ってきた
↓こんな風に /path/to/app
以下に index.js
、さらに lib
以下に mod.js
がある構成だとして
/path/to/app
├ index.js
└ lib
└ mod.js
↓ファイルの中身をこうして node
コマンドで index.js
を実行した結果は、コード中のコメントに書いた通りになる
const path = require('path');
console.log(path.resolve('.')); // -> /path/to/app
console.log(path.resolve('..')); // -> /path/to
console.log(__dirname); // -> /path/to/app
require('./lib/mod');
const path = require('path');
console.log(path.resolve('.')); // -> /path/to/app (index.jsと結果が変わらない)
console.log(path.resolve('..')); // -> /path/to (index.jsと結果が変わらない)
console.log(__dirname); // -> /path/to/app/lib
path.resolve()
が返すパスは、常に node
コマンドで直接実行したスクリプトから見たパスらしい。ファイルから見たパスではない。
もし mod.js
から見た ../
の絶対パスを知りたい場合は、↓のように __dirname
と組み合わせて書く必要がある。
const path = require('path');
console.log(path.resolve('..')); // -> /path/to
console.log(path.resolve(__dirname, '..')); // -> /path/to/app (mod.jsから見た../)