title | description | i18nReady |
---|---|---|
NPMに公開する |
AstroコンポーネントをNPMに公開する方法を学びます |
true |
import { Steps } from '@astrojs/starlight/components'; import { FileTree } from '@astrojs/starlight/components';
新しいAstroコンポーネントを作成していますか? npm!に公開しましょう!
Astroコンポーネントを公開することは既存の作業を複数のプロジェクトで再利用し、より広いAstroコミュニティと共有するための素晴らしい方法です。AstroコンポーネントはNPMに直接公開でき、他のJavaScriptパッケージと同じようにインストールできます。
インスピレーションをお探しですか?Astroコミュニティのお気に入りのテーマやコンポーネントをご覧ください。また、npmを検索して、公開されているカタログ全体を確認することもできます。
:::tip[一人で進めるのは不安ですか?] コミュニティがサポートする、すぐに使えるテンプレートとしてAstroコミュニティのコンポーネントテンプレートをチェックしてください! :::
コンポーネントの開発をすぐに始めるには、すでにセットアップされたテンプレートを使用できます。
# 新しいディレクトリにAstroコンポーネントのテンプレートを初期化する
npm create astro@latest my-new-component-directory -- --template component
# yarn
yarn create astro my-new-component-directory --template component
# pnpm
pnpm create astro@latest my-new-component-directory -- --template component
:::note[必要知識] この章に入る前に、以下の基本的なことを理解しておくとよいでしょう:
新しいパッケージを作成するには、プロジェクト内でworkspacesを使用するように開発環境を設定します。これにより、Astroの作業用コピーと一緒にコンポーネントを開発できるようになります。
- my-new-component-directory/ - demo/ - ... テストとデモのためのディレクトリ - package.json - packages/ - my-component/ - index.js - package.json - ... パッケージで使用される追加のファイルこの例では、my-project
という名前のプロジェクトに、my-component
という単一のパッケージと、コンポーネントのテストとデモ用のdemo/
ディレクトリを作成します。
これはプロジェクトルートのpackage.json
ファイルで設定されます:
{
"name": "my-project",
"workspaces": ["demo", "packages/*"]
}
この例では、packages
ディレクトリから複数のパッケージを一緒に開発できます。これらのパッケージは、Astroの作業用コピーをインストールできるdemo
からも参照できます。
npm create astro@latest demo -- --template minimal
# yarn
yarn create astro demo --template minimal
# pnpm
pnpm create astro@latest demo -- --template minimal
個々のパッケージを構成する初期ファイルには、package.json
とindex.js
の2つがあります。
パッケージディレクトリのpackage.json
には、説明、依存関係、その他のパッケージメタデータなど、パッケージに関連するすべての情報が含まれています。
{
"name": "my-component",
"description": "Component description",
"version": "1.0.0",
"homepage": "/~https://github.com/owner/project#readme",
"type": "module",
"exports": {
".": "./index.js",
"./astro": "./MyAstroComponent.astro",
"./react": "./MyReactComponent.jsx"
},
"files": ["index.js", "MyAstroComponent.astro", "MyReactComponent.jsx"],
"keywords": ["astro", "withastro", "astro-component", "...", "..."]
}
コンポーネントの機能を他の人に伝えるための簡単な説明です。
{
"description": "An Astro Element Generator"
}
Node.jsとAstroがindex.js
ファイルを解釈するために使用するモジュール形式です。
{
"type": "module"
}
index.js
をimport
とexport
を使用したエントリーポイントとして使用できるように、"type": "module"
を指定してください。
プロジェクトのホームページのURLです。
{
"homepage": "/~https://github.com/owner/project#readme"
}
これはユーザーをオンラインデモ、ドキュメント、またはプロジェクトのホームページに誘導する素晴らしい方法です。
名前でインポートされたパッケージのエントリーポイントです。
{
"exports": {
".": "./index.js",
"./astro": "./MyAstroComponent.astro",
"./react": "./MyReactComponent.jsx"
}
}
この例では、my-component
をインポートするとindex.js
が使用され、my-component/astro
やmy-component/react
をインポートするとそれぞれMyAstroComponent.astro
やMyReactComponent.jsx
が使用されます。
npm経由でユーザーに配布されるバンドルから不要なファイルを除外するためのオプションの最適化です。ここにリストされたファイルのみがパッケージに含まれるため、パッケージの動作に必要なファイルを追加または変更する場合は、このリストを適宜更新する必要があります。
{
"files": ["index.js", "MyAstroComponent.astro", "MyReactComponent.jsx"]
}
コンポーネントに関連するキーワードの配列で、他のユーザーがnpmでコンポーネントを見つけるのに役立ち、その他の検索カタログでも使用されます。
Astroエコシステムでの発見可能性を最大限に高めるために、特別なキーワードとしてastro-component
またはwithastro
を追加してください。
{
"keywords": ["astro-component", "withastro", "... etc", "... etc"]
}
:::tip キーワードはインテグレーションライブラリでも使用されています!NPMで検索するキーワードの一覧は以下をご覧ください。 :::
パッケージがインポートされるたびに使用されるメインのパッケージエントリーポイントです。
export { default as MyAstroComponent } from './MyAstroComponent.astro';
export { default as MyReactComponent } from './MyReactComponent.jsx';
これにより、複数のコンポーネントを1つのインターフェースにまとめてパッケージ化できます。
---
import { MyAstroComponent } from 'my-component';
import { MyReactComponent } from 'my-component';
---
<MyAstroComponent />
<MyReactComponent />
---
import * as Example from 'example-astro-component';
---
<Example.MyAstroComponent />
<Example.MyReactComponent />
---
import MyAstroComponent from 'example-astro-component/astro';
import MyReactComponent from 'example-astro-component/react';
---
<MyAstroComponent />
<MyReactComponent />
Astroには開発専用の「パッケージモード」はありません。代わりに、プロジェクト内でパッケージを開発およびテストするためのデモプロジェクトを使用する必要があります。これは開発専用のプライベートウェブサイトでも、パッケージのための公開デモ/ドキュメントウェブサイトでも構いません。
既存のプロジェクトからコンポーネントを抽出する場合でも、そのプロジェクトを使用して抽出したコンポーネントの開発を継続することができます。
Astroは現在、テストランナーを提供していません。(この機能の開発に協力していただける方は、Discordに参加してください!)
当面のテストに関する推奨事項は以下の通りです:
1. `demo/src/pages`ディレクトリにテスト用の`fixtures`ディレクトリを追加します。-
実行したいテストごとに新しいページを追加します。
-
各ページには、テストしたいコンポーネントの使用例を含めます。
-
astro build
を実行してfixturesをビルドし、dist/__fixtures__/
ディレクトリの出力を期待する結果と比較します。- my-project/demo/src/pages/__fixtures__/
- test-name-01.astro
- test-name-02.astro
- test-name-03.astro
- my-project/demo/src/pages/__fixtures__/
パッケージの準備ができたら、npm publish
コマンドを使用してnpmに公開できます。失敗した場合は、npm login
でログインしているか、package.json
が正しいかを確認してください。成功すれば完了です!
Astroパッケージにはbuild
ステップが不要であることに注目してください。.astro
、.ts
、.jsx
、.css
などのAstroがネイティブにサポートするファイルタイプは、ビルドステップなしで直接公開できます。
Astroがネイティブにサポートしていない他のファイルタイプが必要な場合は、パッケージにビルドステップを追加してください。この高度な作業については、ご自身で対応していただく必要があります。
あなたの成果をインテグレーションライブラリに追加して、共有しましょう!
:::tip
インテグレーションの構築に助けが必要ですか?あるいは他のインテグレーション開発者と交流したいですか?Discordサーバーに専用の#integrations
チャンネルがあります。ぜひ挨拶に来てください!
:::
ライブラリは毎週自動的に更新され、astro-component
またはwithastro
キーワードを持つNPMに公開されているすべてのパッケージを取り込みます。
インテグレーションライブラリは、package.json
からname
、description
、repository
、homepage
のデータを読み取ります。
アバターはライブラリであなたのブランドを際立たせる素晴らしい方法です!パッケージを公開したら、アバターを添付してGitHubのイシューを作成してください。リストに追加します。
:::tip
NPMから読み取った情報を上書きする必要がありますか?問題ありません!更新された情報を添えてイシューを作成してください。カスタムのname
、description
、homepage
が使用されるようにします。
:::
必須のastro-component
またはwithastro
キーワードに加えて、パッケージを自動的に整理するための特別なキーワードも使用されています。以下のキーワードのいずれかを含めると、インテグレーションライブラリの対応するカテゴリーにインテグレーションが追加されます。
カテゴリー | キーワード |
---|---|
アクセシビリティ | a11y , accessibility |
アダプター | astro-adapter |
アナリティクス | analytics |
CSS + UI | css , ui , icon , icons , renderer |
フレームワーク | renderer |
コンテンツローダー | astro-loader |
画像 + メディア | media , image , images , video , audio |
パフォーマンス + SEO | performance , perf , seo , optimization |
開発ツールバー | devtools , dev-overlay , dev-toolbar |
ユーティリティ | tooling , utils , utility |
カテゴリーに一致するキーワードを含まないパッケージは、Uncategorized
として表示されます。
あなたの成果を共有することを推奨します。私たちは才能あるAstronautsが作るものを見るのが大好きです。Discordで私たちと共有するか、ツイートで@astrodotbuildにメンションしてください!