node.js でパスを取得する方法についてのメモ
$ node ~/hoge/Foo.js/a.js
を実行したときに、
-
process.argv[1]
から、node コマンドに指定された a.js のパス(~/hoge/Foo.js/a.js
)を取得できます -
process.cwd()
から、node コマンド実行時のワーキングディレクトリパス(~/hoge/Foo.js
)を取得できます -
__dirname
には、現在実行中のソースコードが格納されているディレクトリパスが格納されています。~/hoge/Foo.js/a.js
内部で__dirname
を取得すると~/hoge/Foo.js
になります~/hoge/Foo.js/b/b.js
内部で__dirname
を取得すると~/hoge/Foo.js/b
になります~/hoge/Foo.js/c/c.js
内部で__dirname
を取得すると~/hoge/Foo.js/c
になります- ソースコード(a.js, b.js, c.js)を結合し、1ファイル化(a.js)した場合は、 __dirname の値が変化します
▾ hoge/
▾ Foo.js/
▾ b/
b.js
▾ c/
c.js
a.js
// ~/hoge/Foo.js/a.js
console.log(process.argv[1], "a.js", "cwd", process.cwd());
console.log(process.argv[1], "a.js", "__dirname", __dirname);
console.log(process.argv[1], "a.js", "path.resolve", require("path").resolve(""));
console.log("----");
require("./b/b"); // ~/hoge/Foo.js/b/b.js
// ~/hoge/Foo.js/b/b.js
console.log(process.argv[1], "b.js", "cwd", process.cwd());
console.log(process.argv[1], "b.js", "__dirname", __dirname);
console.log(process.argv[1], "b.js", "path.resolve", require("path").resolve(""));
console.log("----");
require("../c/c"); // ~/hoge/Foo.js/c/c.js → "../c/c" ではなく "../c/c.js" としても結果は同じ
// ~/hoge/Foo.js/c/c.js
console.log(process.argv[1], "c.js", "cwd", process.cwd());
console.log(process.argv[1], "c.js", "__dirname", __dirname);
console.log(process.argv[1], "c.js", "path.resolve", require("path").resolve(""));
~/
の部分はユーザの環境ごとのパスに展開されます
$ node a.js
~/hoge/Foo.js/a.js a.js cwd ~/hoge/Foo.js
~/hoge/Foo.js/a.js a.js __dirname ~/hoge/Foo.js
~/hoge/Foo.js/a.js a.js path.resolve ~/hoge/Foo.js
----
~/hoge/Foo.js/a.js b.js cwd ~/hoge/Foo.js
~/hoge/Foo.js/a.js b.js __dirname ~/hoge/Foo.js/b
~/hoge/Foo.js/a.js b.js path.resolve ~/hoge/Foo.js
----
~/hoge/Foo.js/a.js c.js cwd ~/hoge/Foo.js
~/hoge/Foo.js/a.js c.js __dirname ~/hoge/Foo.js/c
~/hoge/Foo.js/a.js c.js path.resolve ~/hoge/Foo.js