🐕

esbuild の生成物の先頭に @ts-nocheck をくっつけるプラグイン

2022/02/07に公開

esbuild でバンドルした結果の先頭行に @ts-nocheck コメントを追加する小さな esbuild プラグインを書いたのでメモとして残しておきます。

そんなプラグインいつ欲しくなるんだよという感じですがほしくなってしまったので仕方なし。

https://github.com/prettier/prettier/pull/12248

ビルドが終わったタイミングで fs.readFileSync でビルド結果の中身を読み込んで // @ts-nocheck をくっつけて fs.writeFileSync で同じ場所に書き込んでいます。

もっとスマートにビルド結果の中身をいじる方法を知っている人がいたら教えて下さい。

import fs from "node:fs";

const tsNoCheck = "// @ts-nocheck\n";

export default function esbuildPluginTsNocheck() {
  return {
    name: "ts-no-check",
    setup(build) {
      const options = build.initialOptions;
      const { outfile } = options;
      build.onEnd(() => {
        if (!fs.existsSync(outfile)) {
          throw new Error(`${outfile} not exists`);
        }
        const text = fs.readFileSync(outfile, "utf8");
        fs.writeFileSync(outfile, tsNoCheck + text);
      });
    },
  };
}

Discussion