7月31日、dntはESMとCommonJSのハイブリッドnpmモジュールを簡単に公開する方法を発表しました。
JavaScriptモジュールの作成と公開は依然として困難であり、多くの人が複雑なリリースパイプラインやわずかに異なるモジュール構文を持つ2つのコードのコピーを維持することに頼っています。
dntを使用することで、モジュールを一度書いてTypeScriptなどのモダンなツールで変換し、すべてのユースケースをサポートすることができます。
dntの機能: ESMとCommonJSの両方をサポートし、Node.js、Deno、ブラウザで動作します
dntは、DenoモジュールをNode.js/npm互換のパッケージに変換するビルドツールです。
このツールはESMとCommonJSの両方をサポートし、Node.js、Deno、ブラウザで動作します。
また、TypeScriptとJavaScriptもサポートしています。
これにより、モジュールの開発とテストをDenoとTypeScriptで行い、公開時にはNode.js/npm互換の形式に変換することができます。
dntは以下の機能を提供しています。
- DenoのコードをNode.js互換のTypeScriptコードに変換し、Denoの拡張モジュール指定子をNode.jsモジュール解決に互換性のあるものに書き換える
- Denoの名前空間APIや他のグローバル変数のためのシムを注入する
- Skypackやesm.shからのリモートインポートをbare specifier importsに書き換えてpackage.jsonに依存関係として追加する
- 変換されたTypeScriptコードをtscで型チェックし、ESM、CommonJS、TypeScriptの型宣言ファイルとpackage.jsonのセットとして出力する
- 最終的な出力をNode.jsで実行するテストランナーを提供する
dntを使用すると、モジュールの開発とテストはDenoとTypeScriptで行い、公開する際にはdntを使用してNode.js/npm互換の形式にエクスポートすることができます。
これにより、モジュールのメンテナンスが容易になります。
dntの使用例: モジュールの開発とテストはDenoとTypeScriptで行い、公開する際にはdntを使用してNode.js/npm互換の形式にエクスポートします
以下のサンプルコードは、is-42
というモジュールをnpmパッケージに変換するためのビルドスクリプトです。
import { build, emptyDir } from "https://deno.land/x/dnt@0.37.0/mod.ts";
await emptyDir("./npm");
await build({
entryPoints: ["./mod.ts"],
outDir: "./npm",
shims: {
deno: true,
},
package: {
name: "is-42",
version: Deno.args[0],
description: "Boolean function that returns whether or not parameter is the number 42",
license: "MIT",
repository: {
type: "git",
url: "git+https://github.com/lambtron/is-42.git",
},
bugs: {
url: "https://github.com/lambtron/is-42/issues",
},
},
postBuild() {
Deno.copyFileSync("LICENSE", "npm/LICENSE");
Deno.copyFileSync("README.md", "npm/README.md");
},
});
このサンプルコードでは、build()
関数のオプションを設定し、postBuild()
関数でファイルのコピーを行っています。
dntを使用することで、CommonJSとES Modulesの両方をサポートするnpmパッケージを簡単に作成できます。
また、DenoとTypeScriptで開発およびテストを行い、dntを使用してNode.js/npm互換の形式でパッケージをエクスポートすることができます。
これにより、モジュールのメンテナンスが容易になり、コードベースが小さくなります。
詳しい内容はdnt — the easiest way to publish a hybrid npm module for ESM and CommonJSを参照してください。
まとめ
dntはESMとCommonJSのハイブリッドnpmモジュールを簡単に公開する方法を提供します。
モジュールの開発と公開が簡単になり、ESMとCommonJSの両方をサポートするため、ユーザーの利用範囲を広げることができます。
dntは既にGitHubで公開されており、多くのモジュールの開発者によって使用されています。
今後もさらなる機能の追加や改善が期待されており、モジュールの開発と公開のプロセスをさらに簡素化することが期待されています。