🔩
dntを使ってDenoのコードからnpmパッケージを作る
先日こんなツイートを見かけました。
曰く、ESM形式のモジュールをnpmパッケージに変換してくれるようです。
自身でメンテナンスしているnpmパッケージでこれを試してみたのでレポートしてみます。
題材となるnpmパッケージについて
esbuild-gas-pluginを題材にしてみました。
Node.js向けのコード(index.ts)と、Deno向けのコード(mod.ts)がありました。
ほぼ同じ実装なので、どちらかのコードに一本化できると嬉しいですね。
さっそく使ってみる
というわけで、dntを使ったビルドスクリプトを書いていきましょう。
最終形はこちらです。
このスクリプトを実行すると、npmディレクトリに成果物が出力されます。
$deno run -A build.ts
npmディレクトリの中を見ると、ESMのコード(npm/esm)とCJSのコード(npm/script)、package.jsonが配置されています。
このディレクトリでnpm publishすると、npmに公開することができます。
使ってみたメモ
- 型定義ファイルを生成するには、
declaration: 'separate'を指定する - npmパッケージにはshimを同梱するので、サイズがでかくなりがち(
npm packして確認)- deno_std以外のshimの設定はここを参照してください
- npmパッケージに必要な依存関係を
mappingsで設定する必要があり、若干冗長かも
まとめ
dntを使ってNode.js向けのコードを生成できるようになりました。
Denoのコードに一本化できたのでいい感じですね。
少ないケースとは思いますが、同じような環境で開発している方はぜひ参考にしてみてください!
Discussion