🔩
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