スクリプト内からスクリプトを呼んでるとき、呼ばれた方のスクリプトで path.resolve() したら、なんか思ってるのと違うものが返ってきたから

↓こんな風に、/path/to/app 以下にいろいろある構成だとして…

 /path/to/app
  ├ lib
  │  └ mod.js
  └ index.js

↓それらがこういう中身だとして…

index.js
const path = require('path');
console.log("index.js   で path.resolve('./')  ->", path.resolve('./'));
console.log("index.js   で path.resolve('../') ->", path.resolve('../'));
console.log("index.js   で __dirname           ->", __dirname);
require('./lib/mod');
lib/mod.js
const path = require('path');
console.log("lib/mod.js で path.resolve('./')  ->", path.resolve('./'));
console.log("lib/mod.js で path.resolve('../') ->", path.resolve('../'));
console.log("lib/mod.js で __dirname           ->", __dirname);

node コマンドで index.js を実行した結果は、以下のようになる。

index.js   で path.resolve('./')  -> /path/to/app
index.js   で path.resolve('../') -> /path/to
index.js   で __dirname           -> /path/to/app
lib/mod.js で path.resolve('./')  -> /path/to/app
lib/mod.js で path.resolve('../') -> /path/to
lib/mod.js で __dirname           -> /path/to/app/lib

path.resolve() が返すパスは、常に node コマンドで直接実行したスクリプトから見たパスらしい?

てっきり、lib に潜ったら ../ を増やさなきゃいけないと思ってた。

もし lib/mod.js から見た ../ の絶対パスを知りたい場合は、path.resolve(__dirname, '../') のように __dirname と組み合わせて書く。