この記事ではnpmパッケージの公開・バージョンアップ・削除方法を紹介します。
npmパッケージを公開するには、事前にnpmアカウントの作成とGitHubリポジトリの作成が必要です。
1. 環境
- macOS:13.1
- Node.js:18.12.1
- npm:8.19.2
2. npmパッケージの公開
2-1. package.jsonの作成
公開するnpmパッケージにはpackage.json
が含まれている必要があります。
プロジェクトのルートディレクトリで以下のコマンドを実行してpackage.json
を作成します。
$ npm init
プロンプトに表示された各項目の質問に答えると、package.json
が作成されます。
次に、作成されたpackage.json
にbin
の項目を追加します。
"bin": { "<package-name>": "./index.js" },
上記を追加することで、公開したパッケージをnpx <package-name>
で使用できるようになります。
2-2. 依存するパッケージの追加
プロジェクトが依存するパッケージをpackage.json
の"dependencies"
または"devDependencies"
に追加する必要があります。
"dependencies"
: アプリケーションの実行に必要なパッケージ"devDependencies"
: ローカルでの開発・テストにのみ必要なパッケージ
プロジェクトのルートディレクトリで以下のコマンドを実行して依存するパッケージを追加します。
# "dependencies"に追加する場合 $ npm install <package-name> # "devDependencies"に追加する場合 $ npm install <package-name> --save-dev
2-3. npmレジストリへの公開
最後に作成したパッケージをnpmレジストリに公開します。
パッケージをnpmレジストリに公開する前に、パッケージディレクトリへのパスを指定してnpm install
を実行し、パッケージのテストを行います。
$ npm install path/to/my-package
次にnpmアカウントにログインします。
$ npm login
最後にプロジェクトのルートディレクトリで以下のコマンドを実行して、パッケージをnpmレジストリに公開します。
$ npm publish
3. npmパッケージのバージョンアップ
公開したパッケージに変更を加えた場合、パッケージのバージョン番号も更新する必要があります。
プロジェクトのルートディレクトリで以下のコマンドを実行して、package.json
のバージョン番号を更新します。
# パッチバージョンの更新 $ npm version patch v1.0.1 # マイナーバージョンの更新 $ npm version minor v1.1.0 # メジャーバージョンの更新 $ npm version major v2.0.0
npm-version
コマンドは更新したバージョン番号のコミットとタグも同時に生成します。
リモートレポジトリに最新のコミットとタグを反映し、パッケージを公開します。
$ git push origin main $ git push origin v2.0.0 $ npm publish
4. npmパッケージの削除
パッケージに依存関係がなく、公開後72時間以内であれば、パッケージをnpmレジストリから完全に削除できます。
パッケージの削除には以下の注意が必要です。
package@version
は一度しか使用できない- 同名・同バージョンのパッケージは削除しても2度と使えない
- 再度公開する場合はパッケージ名を変えるか、バージョンを上げる必要がある
- パッケージの削除は取り消しできない
- パッケージ全体を削除してから24時間が経過するまでは、そのパッケージの新しいバージョンを公開することはできない
プロジェクトのルートディレクトリで以下のコマンドを実行してパッケージをnpmレジストリから削除します。
# パッケージ全体を削除する場合 $ npm unpublish <package-name> -f # パッケージの特定のバージョンを削除する場合 $ npm unpublish <package-name>@<version>
【参考】
- How to publish packages to npm (the way the industry does things) | Zell Liew
- How to Publish a Package on npm
- 初めてのnpm パッケージ公開 - Qiita
- node.js - What's the difference between dependencies, devDependencies and peerDependencies in npm package.json file? - Stack Overflow
- 【いまさらですが】package.jsonのdependenciesとdevDependencies - Qiita
- npm の package.json の bin の意味とパッケージ公開 - Qiita