🐙

esbuild でビルドするときのスクリプト

2022/03/13に公開

最近ライブラリをビルドするときはもっぱら esbuild を使っている。

esbuild を使うときには大体 ./scripts/build.mjs みたいなのを用意している。この記事では、自分が使っているビルドスクリプトの雛形を紹介する。

Stage 3 の Import Assertions と JSON modules を使って package.json を取得するので、Node.js v17 系が必要になる。

環境変数 WATCHtrue を渡しておくとウォッチモードになる。

各種設定は用途に合わせてお好みで。

import { build } from "esbuild";
import pkg from "../package.json" assert { type: "json" };

const dependencies = Object.keys(pkg.dependencies ?? {});
const peerDependencies = Object.keys(pkg.peerDependencies ?? {});

const external = [...dependencies, ...peerDependencies];

/** @type {import('esbuild').BuildOptions} */
const options = {
  entryPoints: ["./src/index.ts"],
  minify: true,
  bundle: true,
  outfile: "./dist/index.js",
  target: "node14.11",
  platform: "node",
  format: "cjs",
  external,
};

if (process.env.WATCH === "true") {
  options.watch = {
    onRebuild(error, result) {
      if (error) {
        console.error("watch build failed:", error);
      } else {
        console.log("watch build succeeded:", result);
      }
    },
  };
}

build(options).catch((err) => {
  process.stderr.write(err.stderr);
  process.exit(1);
});

Discussion