独自TypeScript Library公開へ向けてtsupをチェケラッチョ
興味があるけど、tsupを聞いたことがない人のために、私たちはこのモダンで堅牢なJavaScriptツールについて説明します。tsupは、人気のあるrollupの代替となる新しいバンドルツールで、JavaScriptライブラリを作成し、他の人が自分のプロジェクトにnpm installできるように、npmレジストリに提出する方法を説明します。この記事は、JavaScriptの拡張機能であるTypeScriptに焦点を当てています。
tsupは、キャッシュを必要とせずに極めて高速な現代のJavaScriptバンドラであるesbuildによって支えられています。このツールは、構成なしでTypeScriptライブラリをバンドルすることができます。このツールは、node.jsプラットフォームが内部的にサポートする任意のファイルをバンドルすることができます。具体的には、.js、.json、.mjs、.ts、.tsxがサポートされており、この時点で実験的に.cssもサポートされています。
yarn add -D tsup
ライブラリのエントリーポイントになるsrc/index.tsを作成します。tsupにこれらのファイルを消費し、どこかに出力するよう指示する必要があります(出力ディレクトリを./distに設定します)。
package.jsonを変更し、スクリプトのプロパティの下にビルドとスタートの行を追加します。
"build": "tsup src/index.ts",
これで、npm run buildを実行すると、tsupコンパイラがsrc/index.tsを消費し、自動的にファイルを./distディレクトリにコンパイルします。
![](https://assets.st-note.com/img/1677810674693-Efusyv275S.png?width=1200)
![](https://assets.st-note.com/img/1677810709459-W6VZ6UC9yJ.png)
デフォルトでは、tsupは出力ファイルを./distに送信しますが、まもなく説明する設定ファイルで構成することもできます。
./dist/index.jsで生成されたファイルを見ると、空のコンテンツが表示されます。これは、まだライブラリのためのコードを書いていないためです。
より詳細に出力を分析するために、基本的なコードを入力しましょう。
再度、yarn buildを実行し、tsupが私たちのコードをES5にトランスパイルしたことに注目してください。
![](https://assets.st-note.com/img/1677810948832-siEJ8WabZF.png?width=1200)
tsupでは、自動的に使用される設定ファイルを作成して、多くのことができます。以下の内容を持つtsup.config.tsファイルを作成してください。
import type { Options } from 'tsup'
const config: Options = {
//
}
export default config
この設定ファイルを使用すると、tsupコンパイラに異なる動作を指示できます。
たとえば、dtsをtrueに設定して、TypeScript宣言ファイルを生成するように指示できます。
この設定を使用するには、プロジェクトにtypescriptをインストールする必要があります。そうしないと、エラーが発生します。
yarn add -D typescript
再度npm run buildを実行すると、宣言タイプを含む追加のファイルが生成されます。
![](https://assets.st-note.com/img/1677812627414-TFL51crA2B.png)
デバッグ時により正確なスタックトレースを生成するために、ソースマップを生成することもできます。
![](https://assets.st-note.com/img/1677812783269-7EEXwgivei.png)
構成を 1 行更新するだけで、これら 3 つの形式すべてを生成するように tsup を簡単に構成できます。
const config: Options = {
entry: ['src/index.ts'],
dts: true,
sourcemap: true,
format: ['iife', 'cjs', 'esm'],
}
"iife" (Immediately Invoked Function Expression):この形式は、JavaScriptをブラウザ環境で直接実行できるようにするために使用されます。"iife"フォーマットでは、グローバルオブジェクト(windowオブジェクト)にライブラリを公開します。
"cjs" (CommonJS):この形式は、Node.jsで使用される形式です。CommonJS形式は、モジュールを定義する方法に関する標準を提供します。CommonJSフォーマットでは、モジュールがexportsオブジェクトに公開されます。
"esm" (ECMAScript Modules):この形式は、ES6(またはそれ以降)で導入された標準的なJavaScriptモジュール形式です。"esm"フォーマットでは、import/exportを使用してモジュールが定義されます。
これらのフォーマットを指定することで、ライブラリを使用するための最適な形式を提供できます。たとえば、Node.jsで使用する場合は、CommonJSフォーマットが必要ですが、ブラウザで使用する場合は、"iife"フォーマットが必要です。"esm"フォーマットは、最新のブラウザで使用することができ、Tree Shaking による効率的なバンドルを実現することができます。
![](https://assets.st-note.com/img/1677813551390-aXGHWzes5z.png?width=1200)
消費者が自分のプロジェクトで使用するフォーマットに対応するファイルをインポートできるようにするには、package.jsonを編集して、特定のフォーマットに対応する正しいファイルを指す必要があります。
exports について詳しく読みたい場合は、公式の Node.js ドキュメントを参照してください。それはこの記事の範囲外です。
以上で、最小限のモダンな JavaScript/TypeScript ライブラリを作成するための推奨要件をカバーしました!次に行う必要があるのは、パッケージを npm レジストリに公開して、ユーザーがパッケージを npm install できるようにすることです。
これを行うには、package.json に publishConfig キーを追加し、その内部に access を "public" に設定してください。
この記事が気に入ったらサポートをしてみませんか?