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/libpath.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から見た../)
キリウ君が読まないノート