メインコンテンツへスキップ

【npm-scripts】rimrafを使わず、ディレクトリを丸ごと削除するメモ。

     JavaScriptで書かれたコードを細分化する上で、どうしてもTypeScriptの型が欲しくなったのでそのメモ書き。

     npm-scripts を使って "npm run clean" としてトランスパイルしたディレクトリを丸ごと消してしまいたい時がある。そんなときによく挙げられるライブラリに「rimraf」がある。"npm install --save-dev rimraf" で入れてちゃっちゃとやってしまいたいが、ライブラリ依存はなんか腑に落ちない方も一定数?そんな方に向けたメモ。

    実行環境


    $ node -v
    v18.12.1
    
    $ npm -v
    8.19.2
    
    $ ver
    Microsoft Windows [Version 10.0.22000.1455]

    script 実行用ファイルの作成


     やり方にはいくつかあるが、おおまかに。

    1.  package.json と同階層に script ディレクトリを作成し、その配下に clean.js を置く。

    2.  clean.js に fs module を用いて、ファイル操作を定義する。

    3.  package.json の "scripts" 内に、 "clean": "node script/clean" と記述する。

     ここで想定するディレクトリ構成は以下のようにした。

    project/
      ├ build/
      │ └ ...
      │   // src ディレクトリ配下と同様の構成
      │
      ├ script/
      │ └ clean.js
      │
      ├ src/
      │ └ ...
      │   // build コマンドによってまるまるトランスパイル
      │
      ├ package.json
      └ tsconfig.json

     また、 script/clean.js 及び package.json は以下のようにしている。

    // script/clean.js
    const fs = require("fs");
    const path = require("path");
    const buildPath = path.resolve(__dirname, '../build');
    
    (async () => {
      try {
        await fs.promises.rm(buildPath, { recursive: true });
        await fs.promises.mkdir(buildPath);
        console.log(`clean: ${buildPath}`);
      } catch (error) {
        if (error.code = 'ENOENT') {
          await fs.promises.mkdir(buildPath);
          console.log(`mkdir: ${buildPath}`);
        } else {
          console.log(error);
        }
      }
    })();
    // package.json
    {
      //...
    
      "scripts": {
        "clean": "node script/clean",
    
      //...
    }
    $ npm run clean
    
    > project@1.0.0 clean
    > node script/clean
    
    clean: C:\Users\xxx\project\build
    

     これにより、 build ディレクトリが丸ごと削除される。 Node.js API を用いているため、恐らく OS による差異はないと予想(未検証)。

    コピペは注意! 検証込みで、あくまで自己責任で。

    tmp ディレクトリへの応用


     tmp ディレクトリといえば、一般的には一時保存用ディレクトリを指す。tmp ディレクトリをまるっとスッキリさせたいときに便利なやつを予め定義しておく。

      src ディレクトリ配下に tmp ディレクトリ、及び util ディレクトリ(便利なやつを入れるところ)を作成する。 util/tmp.js には以下のように書く。

    // src/util/tmp.js
    const fs = require("fs");
    const path = require("path");
    const tmpPath = path.resolve(__dirname, '../tmp');
    
    const tmp = {};
    tmp.path = tmpPath;
    tmp.clean = async () => {
      try {
        await fs.promises.rm(tmpPath, { recursive: true });
        await fs.promises.mkdir(tmpPath);
      } catch (error) {
        if (error.code = 'ENOENT') {
          await fs.promises.mkdir(tmpPath);
        } else {
          console.log(error);
        }
      }
    }
    
    module.exports = tmp;

     これで tmp.clean() と呼び出すだけで tmp ディレクトリはもぬけの殻となる。


     
     
    【フォロワー300目標!】 数学・物理/プログラミングなど 大学生向けの記事を書いています📝 メンバーシップ募集中。 * * * Amazon のアソシエイトとして、 Keshitanは適格販売により収入を得ています。

    あなたへのおすすめ