Vue Academy · レッスン

Vueプラグインの公開と型付け

パッケージ構成、ComponentCustomPropertiesのTypeScript拡張、npmでの配布

レッスン 4/413 ステップ

「Vueプラグインの公開と型付け」はCoddyKit上の無料Vue Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはVue Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Vue Academyコースには全4レッスンが含まれています。

npm向けプラグインのパッケージ化

Vueプラグインを共有するには、npmパッケージとして公開します。パッケージには適切な依存関係を宣言し、正しくビルドしたものとTypeScriptの型を含め、正しい手順で公開する必要があります。このレッスンでは各手順を取り上げます。

VueのpeerDependencies

Vueは通常の依存関係ではなく、peerDependencyとして列挙します。これによりホストアプリがVueを提供するため、1つのバンドルにVueが2つ含まれることを防げます(リアクティビティが壊れる原因になります)。

{
  "name": "vue-toast-kit",
  "peerDependencies": {
    "vue": "^3.4.0"
  },
  "devDependencies": {
    "vue": "^3.4.0"
  }
}

Viteのライブラリモード

Viteのライブラリモードでパッケージをビルドします。エントリ、名前、出力形式(ES + UMD)をbuild.libに設定し、Vueがバンドルされないよう外部化します。

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

export default defineConfig({
  plugins: [vue()],
  build: {
    lib: {
      entry: 'src/index.ts',
      name: 'VueToastKit',
      fileName: 'index',
      formats: ['es', 'umd']
    }
  }
})

rollupOptionsでのVueの外部化

vueを外部として指定し、UMDビルドではグローバル変数に対応付けます。これにより、利用側のVueが使われます。

build: {
  lib: { /* ... */ },
  rollupOptions: {
    external: ['vue'],
    output: {
      globals: { vue: 'Vue' }
    }
  }
}

型宣言の生成

利用者が自動補完と型チェックを利用できるよう、.d.tsファイルをパッケージに含めます。vite-plugin-dtsを使うと、ライブラリのビルド中に型宣言を出力できます。

import dts from 'vite-plugin-dts'

export default defineConfig({
  plugins: [
    vue(),
    dts({ insertTypesEntry: true })
  ]
})

package.jsonのexportsマップ

exportsフィールドで、利用者が正しいファイルを参照できるようにします。ESMビルドと型宣言を公開し、ESMを優先するパッケージではtype: moduleを設定します。

{
  "type": "module",
  "main": "./dist/index.umd.cjs",
  "module": "./dist/index.js",
  "types": "./dist/index.d.ts",
  "exports": {
    ".": {
      "types": "./dist/index.d.ts",
      "import": "./dist/index.js",
      "require": "./dist/index.umd.cjs"
    }
  }
}

型拡張の公開

プラグインがthis.$toastのようなグローバルプロパティを追加する場合は、公開する型にComponentCustomPropertiesの拡張定義を含めます。これにより、利用者のエディターが自動的に認識できます。

// src/types.d.ts (included in the build)
import type { ToastService } from './toast'

declare module 'vue' {
  interface ComponentCustomProperties {
    $toast: ToastService
  }
}

export {}

公開エントリポイント

src/index.tsのエントリでは、プラグインをデフォルトとしてエクスポートし、利用者が必要とするコンポーザブル、キー、型もエクスポートします。

import ToastPlugin from './plugin'
export default ToastPlugin

export { useToast } from './composable'
export { toastKey } from './toast'
export type { ToastService, Toast } from './toast'

filesフィールド

filesフィールドを使ってビルド出力だけを公開し、パッケージを小さく保ちながらソースと設定ファイルを除外します。

{
  "files": ["dist"],
  "sideEffects": false
}

プロベナンス付きの公開

プロベナンスを付けてnpmに公開すると、パッケージとCIビルドおよびソースコミットを暗号学的に関連付けられます。適切な権限を設定した信頼できるCI(GitHub Actions)から実行してください。

# in CI (GitHub Actions)
npm publish --provenance --access public

# package.json can also set:
# "publishConfig": { "provenance": true }

公開前チェックリスト

公開前に、Vueがpeer depになっていること、distにESMと型が含まれていること、exportsが正しく解決されること、バージョンが更新されていること、dry runの結果に問題がないことを確認します。

# inspect what will be published
npm publish --dry-run

# verify the tarball contents
npm pack

クイックチェック

Vueプラグインの公開についての理解度を確認しましょう。

まとめ

プラグインの公開と型付けについて学びました。

  • Vueの重複を避けるため、VueをpeerDependencyとして列挙します
  • Viteのライブラリモードでビルドし、Vueを外部化します
  • .d.ts(vite-plugin-dts)を出力し、型拡張もパッケージに含めます
  • exports、files、type: moduleを設定します
  • 信頼できるCIから--provenanceを付けて公開します
無料で開始

AI チューターと学ぶ HTML — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
42
レッスン
156

よくある質問

「Vueプラグインの公開と型付け」レッスンは無料ですか?

はい。「Vueプラグインの公開と型付け」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Vue Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Vue Academyコースには全4レッスンが含まれています。

「Vueプラグインの公開と型付け」で何を学びますか?

パッケージ構成、ComponentCustomPropertiesのTypeScript拡張、npmでの配布 ブラウザで直接実行するハンズオンコードでVue Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Vue Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのVue Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「Vueプラグインの公開と型付け」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このVue Academyレッスンでコードを書いて実行できますか?

はい。すべてのVue Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. プラグインアーキテクチャとapp.use()
  2. プラグインでのグローバルプロパティとprovide/inject
  3. 通知・Toastプラグインの例
  4. Vueプラグインの公開と型付け
← Vue Academyに戻る