はじめに
Typescript で書かれた Node.js パッケージを NPM レジストリへ公開する方法を紹介します。
トランスパイラにtsc
を、ターゲットにCommonJS
を想定した、一般的なパッケージを公開する手順を説明します。
この記事では、特に以下の人におすすめの内容になっています。
- パッケージの公開を初めて行う方
- Typescript プロジェクトのパッケージについて知りたい方
- いきなり
standard-version
やsemantic-release
など自動リリースツールを使ったはいいものの、実際にどんなことを行っているのか知りたい方
この記事では、最も原初的なリリースの部分を説明しています。 そこで、Git タグやリリースノート、 GitHub リリースの更新などについては説明していません。 このあたりについては別の記事で紹介する予定です。
最後にはパッケージの削除のやり方まで紹介するので、手を動かしてやってもらえると、雰囲気をつかめるかと思われます。
Typescript の環境構築
まずは、適当な Typescript プロジェクトを用意します。 .gitignore をはじめ各種リンターの導入などは説明から省くので、適宜対応してください。 すでにプロジェクトがある場合は、必要な部分を参考にしてください。
package name については、NPM で一意である必要があります。次のコマンドや、NPM のウェブサイトなどで、プロジェクトが存在しているか確認しておくと確実です。
また最初のversion
については、0.1.0
が推奨されているようですので、それよりも低い0.0.0
にしておきます。
version1.0.0
については、以下の基準があるようです。
もし既にプロダクション用途であなたのソフトウェアが利用されているのなら、それは 1.0.0 であるべきでしょう。 またもし安定した API を持ち、それに依存しているユーザーが複数いるのなら、それは 1.0.0 であるべきでしょう。 もし後方互換性について多大な心配をしているのなら、それは 1.0.0 であるべきでしょう。`
続いて Typescript に必要なパッケージを導入します。
Node.js で動くパッケージを想定しているので、module
はCommonJS
にします。
outDir
にはコンパイルするときの出力先を指定します。
またパッケージなので、declaration
やdeclarationMap
、sourceMap
は全てtrue
にします。
そして、include
にはコンパイルに含めるディレクトリを指定します。今回メインのコードはsrc
以下に置くこととします。
package.json のscript
にビルド用のコマンドと、パブリッシュ前に毎回ビルドを行うコマンドを設定しましょう。
private
オプションはfalse
を明示しておきましょう。true
の場合は決して公開されないことを示します。
また、files
オプションには、実際に公開するディレクトリを指定します。これによって、余計なものを公開せずに済みます。
tsconfig.json のoutDir
で dist を指定したので、これに合わせて dist を指定します。
同様の理由で、main
オプションも dist/index.js にします。これはimport
やrequire
のエントリーポイントとなります。
あとは src ディレクトリを作って、適当なプログラムを用意します。エントリーポイントとしては先程main
で dist/index.js を指定したのでindex.ts
があれば問題ありません。
適当にファイルから関数をインポートして Re-export しておきます。ここはご自身で好きなプログラムを用意しても構いません。
これをコンパイルすると次のようなディレクトリ構造になります。
パッケージを公開する
あとはパッケージを公開するだけです。公開するには、まず NPM のアカウントが必要です。 アカウントがない場合は、こちらからアカウントを作成してください。
続いて、コマンドラインでログインします。
ちゃんとログインできたかは、次のコマンドで確認できます。
無事ログインできたら、いよいよパッケージを公開します。 公開には次のコマンドを実行します。
対話型インタフェースで version を聞かれますので、最初は0.1.0
としましょう。
ここはインクリメントしなければ公開できない仕様になっています。 そのうち採番がめんどくさくなってきますが、commit message から自動採番するツールが存在します。このあたりの解説はまた別の記事で行います。
その後、package.json の version が自動で書き換わり、パッケージの公開が完了します。
またコマンドログを見ると、package.json のprepublishOnly
に指定した、ビルドコマンドも実行されています。
無事公開されたら、公開されたパッケージをインストールしてみましょう。
普通のパッケージのようにimport
やrequire
で指定すると、しっかりインポートできます。エディタにもよりますが、型情報なども表示されているかと思われます。
また、インストールしたパッケージを node_modules から確認すると、以下のような内容が公開されていることがわかります。
package.json のfiles
オプションで指定したように、dist ディレクトリと、package.json のみが公開されているようですね。
パッケージを削除する
パッケージの削除には次のコマンドを実行します。
ちなみに yarn v1 では unpublish コマンドがサポートされていません。 そのため yarn で publish した場合でも、npm で unpublish すれば問題ないです。
また、unpublish には非公開ポリシーが存在します。 詳しくはこちらを参照いただきたいですが、要約すると以下の場合、非公開にできます。
72 時間以内に公開されたパッケージ
- NPM の他のパブリックパッケージに参照されていない
公開から 72 時間以上経過したパッケージ
- NPM の他のパブリックパッケージに参照されていない
- 前週のダウンロード数が 300 以下
- 単一のオーナーまたはメンテナ
テストで作る分には問題ありませんが、他のパブリックパッケージに参照されると、削除は事実上できないことに注意が必要です。
なにはともあれこれで、 Typescript パッケージの公開ができました。
Edit this page on GitHub