node.js でパスとファイル操作する方法

2 min read読了の目安(約2200字

はじめに

pathモジュールを利用したパス操作方法について動作確認したメモを残させていただきます。

pathモジュールを動作確認するディレクトリ構造

  ▾ Hoge/
    ▾ foo.js/
        a.js
      ▾ b/
          b.js
      ▾ c/
          c.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(""));

実行結果

~/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

コードの解説

  • process.argv[1] から、node コマンドに指定された a.js のパス( ~/Hoge/foo.js/a.js )を取得できます
  • process.cwd() から、node コマンド実行時のワーキングディレクトリパス( ~/Hoge/foo.js )を取得できます。
    process.cwd() は現在のワーキングディレクトリの 絶対パス を返します。
  • __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 の値はまた異なるものになります。
    今回コードにはありませんが、__filenameには、現在実行中のソースコードが格納されている絶対パスが格納されています。
  • require("path").resolve("") で cwd を基準とした絶対パスを取得できます。

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(""));

b.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

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(""));

c.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

参考

https://gist.github.com/uupaa/da42698d6b2d2cbb3cca