スクリプト内からスクリプトを呼んでるとき、呼ばれた方のスクリプトで 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から見た../)