環境
- Nodejs v24
- TypeScript v5
TypeScriptで書いたライブラリをnpmに公開する手順をまとめる。
自作のライブラリをnpmで公開したい場合、TypeScriptをそのまま公開することはできない。Node.jsはネイティブでTypeScriptに対応していないからだ。そのためJavaScriptに変換してから公開する必要がある。ここではtsupを使ったビルドからnpmへの公開までの一連の手順を説明する。
初期設定
まずはnpmプロジェクトを初期化する。
npm init -y
package.jsonが生成されるので、名前や説明などを適当に編集しておく。
次にTypeScriptと型定義、ビルドツールのtsupを入れる。
npm install -D typescript @types/node tsup
最後にtsconfig.jsonを生成。
npx tsc --init
tsconfig.jsonは後で必要に応じていじる。まずはデフォルトでいい。
ビルド
tsupを使ってビルドする。tsupはTypeScriptをJavaScriptに変換し、CommonJSとESMの両方の形式で出力してくれる。esbuildベースなので速い。
package.jsonにビルドスクリプトを追加する。
"scripts": { "build": "npx tsup ./src" },
./srcはソースコードの場所。エントリポイントがsrc/index.tsならこれでOK。
ビルド実行。
npm run build
distフォルダが生成される。中身はJavaScriptと型定義ファイル。
公開
package.jsonに公開用の設定を追記する。
"files": [ "dist", "package.json" ], "exports": { ".": { "require": "./dist/index.js", "import": "./dist/index.mjs", "types": "./dist/index.d.ts" } }, "types": "./dist/index.d.ts",
各フィールドの意味は以下の通り。
files- npmに含めるファイル。distとpackage.jsonだけ公開する。ソースコードは含めないexports- エントリポイント。CommonJSなら.js、ESMなら.mjsを返す。型定義は.d.tstypes- 型定義ファイルの場所
mainフィールドも設定しておいた方がいい場合がある。古いNode.jsやツールとの互換性のためだ。
"main": "./dist/index.js",
npmにログインする。
npm login
ユーザー名、パスワード、メールアドレスを入力する。OTPを設定しているならコードも入力。
いざ公開
npm publish
これでnpmに公開される。npm view <パッケージ名>で確認できる。
scoped packageの場合
@username/package-nameのようなscoped packageを公開する場合、デフォルトではprivate扱いになる。公開するなら--access publicが必要。
npm publish --access public
初回だけ必要で、2回目以降は省略できる。ただしpackage.jsonに"private": falseを書いておけば毎回指定しなくて済む。
バージョンアップの方法
ライブラリを更新したらバージョン番号を上げて再公開する。
npm version patch # v1.0.0 → v1.0.1 npm version minor # v1.0.1 → v1.1.0 npm version major # v1.1.0 → v2.0.0
これでpackage.jsonのversionが更新され、gitタグも作成される。その後公開。
npm publish
バージョンアップのたびにgit tagをpushするのを忘れないように。
git push --tags
prepublishOnlyフック
ビルド忘れを防ぐために、prepublishOnlyスクリプトを設定しておくと安心だ。
"scripts": { "build": "npx tsup ./src", "prepublishOnly": "npm run build" }
こうしておくと、npm publishする前に自動でビルドが走る。