mcpField
P
package-publishing

package-publishing

github.com/oakoss開発20111 回インストール10 週間前に更新
リポジトリ

package-publishing について

npm パッケージの作成者向けスキルです。エントリーポイント設定、ESM/CJS の両形式ビルド、TypeScript 宣言、provenance を伴う公開を扱い、設定やモジュール解決の問題にも対応します。

主な機能

  1. 01exports と条件付きエクスポートの設定
  2. 02ESM/CJS 両形式のパッケージ構築
  3. 03TypeScript 宣言の設定
  4. 04npm パッケージ内容の事前確認
  5. 05provenance を伴う公開

活用シーン

  1. 01パッケージのエントリーポイントとサブパス設定
  2. 02モジュール解決問題の調査
  3. 03スコープ付き npm パッケージの公開

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/oakoss/agent-skills --skill package-publishing

インストール後、Claude Code で/package-publishingを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
build-and-publish.md
dual-format.md
package-json-config.md

詳細

パッケージの公開

概要

exports フィールドを使った package.json の設定、ESM/CJS 両形式のビルド、TypeScript 型宣言、来歴情報を含む安全な公開ワークフローなど、最新の npm パッケージ作成を扱います。

使用する場面: パッケージのエントリーポイントを設定する場合、条件付きエクスポートを設定する場合、両形式のパッケージをビルドする場合、スコープ付きパッケージを公開する場合、またはモジュール解決の問題をトラブルシューティングする場合。

使用しない場面: アプリケーションレベルのバンドル設定(Vite/webpack のアプリ設定)、モノレポのワークスペース管理(Turborepo/Nx)、プライベートレジストリの設定(Verdaccio/Artifactory)。

クイックリファレンス

パターンフィールド/コマンド主なポイント
エントリーポイントpackage.json の exportsmain/module を置き換え、内部実装をカプセル化します
CJS フォールバックmainexports に対応していないレガシーな利用側向け
ESM エントリーmoduleバンドラーの慣例であり、Node.js では使用されません
型宣言exports の types 条件各条件ブロックの先頭に記述する必要があります
サブパスのエクスポート"./utils": { ... }明確な公開 API を提供し、深い階層のインポートをブロックします
条件付きエクスポートimport/require 条件利用側ごとに ESM と CJS を切り替えます
パッケージの種類"type": "module".js ファイルを ESM にします。CommonJS には .cjs を使用してください
副作用"sideEffects": falseバンドラーでのツリーシェイキングを有効にします
ピア依存関係peerDependencies共有ランタイム依存関係(React、Vue など)
エンジンの制約"engines": { "node": ">=18" }Node.js の最小バージョンを明記します
ファイルの許可リスト"files": ["dist"]npm に公開されるファイルを制御します
公開前のチェック"prepublishOnly": "npm run build"公開前にビルドが実行されるようにします
ドライランnpm pack --dry-run公開前にパッケージの内容を確認します
来歴情報--provenance フラグまたは信頼できる公開者暗号技術によるビルド証明
スコープ付き公開--access publicスコープ付きパッケージを初めて公開する際に必要です

よくある間違い

間違い正しいパターン
エクスポートでdefaultの後にtypesを配置するtypesはすべてのエクスポートブロックで最初の条件にする必要があります
エクスポートに"./package.json"がないツールとの互換性のために"./package.json": "./package.json"を含めます
importとrequireで異なるAPIを使用するAPIの表面は同じにします。ESMソースを記述し、CJSにトランスパイルします
新しいパッケージでexportsを使わずにmainを使用する主なエントリーポイントの定義にはexportsを使用します
.js形式のESM出力で"type": "module"を忘れる"type": "module"を設定するか、.mjs拡張子を明示的に使用します
src/やnode_modules/を公開する"files"の許可リストを使ってdist/のみを含めます
prepublishOnlyスクリプトがない古い成果物の公開を防ぐため、ビルド手順を追加します
ライブラリでdefaultエクスポートを使用するツール間で一貫した動作を実現するため、名前付きエクスポートを優先します
公開前にnpm packでテストしないパッケージの内容とサイズを確認するため、必ずドライランを実行します
フレームワークプラグインでpeerDependenciesを省略する共有するランタイム依存関係をピア依存関係として宣言します
プロベナンスなしで公開するサプライチェーンの透明性を確保するため、プロベナンスを有効にします
パッケージが"type": "module"のときにCJS用として.d.tsを使用するCJSの型宣言には.d.ctsを、ESMには.d.tsまたは.d.mtsを使用します

委任

  • ビルドツールの設定:Exploreエージェントを使ってtsup/unbuild/rollupの設定を調査します
  • 型解決のデバッグ:「Are the Types Wrong?」(attw)とともにTaskエージェントを使います
  • 公開パイプラインのレビュー:code-reviewerエージェントに委任します

参考資料

コメント