インポート
Astroは、ほとんどの静的アセットを設定不要でサポートしています。プロジェクトのJavaScript(Astro frontmatterスクリプトを含む)のどこでもimport
文を使用でき、Astroは最終ビルドにその静的アセットのビルドされた最適化されたコピーを含めます。また、@import
はCSSと<style>
タグの中でもサポートされています。
対応するファイル形式
セクションタイトル: 対応するファイル形式Astroは、標準で以下のファイル形式をサポートしています。
- Astroコンポーネント(
.astro
) - Markdown(
.md
,.markdown
など) - JavaScript(
.js
、.mjs
) - TypeScript(
.ts
) - NPMパッケージ
- JSON(
.json
) - CSS(
.css
) - CSS Modules(
.module.css
) - イメージとアセット(
.svg
、.jpg
、.png
など)
さらに、Astroを拡張して、React、Svelte、Vueコンポーネントなど、さまざまなUIフレームワークのサポートを追加できます。また、Astro MDXインテグレーション (EN)をインストールし、プロジェクトで.mdx
ファイルを使用することもできます。
public/
内のファイル
セクションタイトル: public/内のファイルプロジェクトのpublic/
ディレクトリには、任意の静的アセットを置けます。Astroはそれをそのまま最終ビルドとして直接コピーします。HTMLテンプレートの中では、public/
内のファイルをURLパスで直接参照できます。
Import構文
セクションタイトル: Import構文Astroは、ESMを使います。これは、ブラウザでサポートされているのと同じimport
およびexport
構文です。
JavaScript
セクションタイトル: JavaScriptJavaScriptは、通常のESMのimport
とexport
の構文でインポートできます。
JSXやTSXファイルをレンダリングするには、適切なUIフレームワーク(React、Preact (EN)、Solid (EN))が必要です。Astroは.js
や.ts
ファイル内のJSXをサポートしていないため、必要に応じて.jsx
か.tsx
拡張子を使用してください。
TypeScript
セクションタイトル: TypeScriptAstroには、TypeScriptのサポートが組み込まれています。Astroプロジェクトで.ts
や .tsx
ファイルを直接インポートしたり、Astroのコンポーネントスクリプトや 巻き上げられたscriptタグの中で直接TypeScriptコードを書けます。
Astroは、型チェックを自ら行うことはありません。型チェックは、IDEや別のスクリプトなど、Astroの外部で行う必要があります。Astroファイルの型チェックには、astro check
コマンドが用意されています。
TypeScriptのモジュール解決ルールでは、TypeScriptファイルをインポートする際に.ts
と.tsx
のファイル拡張子を使用するべきではありません。代わりに、.js
/.jsx
というファイル拡張子を使うか、ファイル拡張子を完全に省略する必要があります。
npmパッケージ
セクションタイトル: npmパッケージnpmパッケージをインストールした場合、Astroでインポートできます。
パッケージがレガシーフォーマットを使用して公開されていた場合、Astroはimport
文が機能するように、パッケージをESMに変換します。場合によっては、動作させるためにvite config
を調整する必要があるかもしれません。
一部のパッケージは、ブラウザ環境に依存しています。Astroコンポーネントはサーバー上で動作するため、パッケージをフロントマターでインポートするとエラーになることがあります。
JSON
セクションタイトル: JSONAstroは、JSONファイルをアプリケーションへ直接インポートできます。インポートされたファイルは、デフォルトのインポートで完全なJSONオブジェクトを返します。
Astroは、CSSファイルをアプリケーションに直接インポートできます。インポートされたスタイルはエクスポートされませんが、インポートすることで自動的にそれらのスタイルがページに追加されます。これはデフォルトですべてのCSSファイルに対して機能し、プラグインによってSassやLessのようなコンパイル可能なCSS言語もサポートします。
CSSファイルのURLを直接参照したり、CSSを文字列としてインポートするなどの高度なCSSインポートの使用例については、スタイリングガイドを参照してください。
CSSモジュール
セクションタイトル: CSSモジュールAstroは、[name].module.css
という命名規則でCSSモジュールをサポートしています。他のCSSファイルと同様に、インポートすると自動的にそのCSSがページに適用されます。しかし、CSSモジュールは、オリジナルのクラス名を一意の識別子にマップする特別なデフォルトの styles
オブジェクトをエクスポートします。
CSSモジュールは、スタイルシートのために一意に生成されたクラス名によって、フロントエンドでコンポーネントのスコープと分離を強制するのに役立ちます。
その他のアセット
セクションタイトル: その他のアセット上記で明示されていないその他のアセットは、ESMの import
を使ってインポートすることができ、最終的にビルドされたアセットへのURLリファレンスを返します。これは、JS以外のアセットをURLで参照する場合に便利です。たとえば、画像要素を作成して、その画像を指すsrc
属性を指定できます。
また、ディレクトリ構造で説明されているように、画像はpublic/
フォルダに配置するのも便利です。
?url
や?raw
など、Viteのインポートパラメータを追加する方法については、Viteの静的アセットの取り扱いガイドを参照してください。
アクセシビリティの観点から、<img>
タグにaltテキストを付加することが推奨されています!画像要素にalt="役に立つ説明"
属性を追加することを忘れないでください。画像が単なる装飾である場合は、この属性を空で指定します。
importエイリアス
セクションタイトル: importエイリアスエイリアスは、インポートのためのショートカットを作成する方法です。
エイリアスは、多くのディレクトリや相対的なインポートを持つコードベースにおいて、開発体験を改善するのに役立ちます。
この例では、開発者はsrc/pages/about/company.astro
、src/components/controls/Button.astro
、そしてsrc/assets/logo.png
間のツリーの関係を理解する必要があります。そして、company.astro
ファイルが移動された場合、これらのインポートも更新しなければなりません。
インポートエイリアスはtsconfig.json
から追加できます。
エイリアスのパスが解決できるようにcompilerOptions.baseUrl
が設定されていることを確認してください。
設定を変更すると、開発サーバーが自動的に再起動します。これにより、プロジェクト内の任意の場所でエイリアスを使用してインポートできるようになりました。
これらのエイリアスは、VS Codeや他のエディタにも自動的に統合されます。
Astro.glob()
セクションタイトル: Astro.glob()Astro.glob()
(EN)は、多数のファイルを一度にインポートするための方法です。
Astro.glob()
は、インポートしたいローカルファイルと一致する相対globパターンを1つのパラメータとして受け取るだけです。これは非同期で、マッチした各ファイルのエクスポートを配列で返します。
Astro.glob
を使用してインポートされたAstroコンポーネントは、AstroInstance
(EN)型です。各コンポーネントのインスタンスは、そのdefault
プロパティを使用してレンダリングできます。
globパターン
セクションタイトル: globパターンglobパターンは、特殊なワイルドカード文字をサポートするファイルパスです。プロジェクト内の複数のファイルを一度に参照する場合に使用します。
たとえば、globパターン./pages/**/*.{md,mdx}
は、pages
サブディレクトリで始まり、そのサブディレクトリをすべて調べ(/**
)、 ファイル名(/*
)が.md
または.mdx
で終わる(.{md,mdx}
)ファイルにマッチします。
Astroのglobパターン
セクションタイトル: AstroのglobパターンAstro.glob()
で使用する場合、globパターンは文字列リテラルである必要があり、変数を含むことはできません。回避策については、トラブルシューティングガイドを参照してください。
また、グロブパターンは、以下のいずれかで始まる必要があります。
./
(カレントディレクトリで起動する)../
(親ディレクトリから開始する場合)/
(プロジェクトのルートから開始する場合)
globパターンの構文について、詳しくはこちらをご覧ください。
Astro.glob()
とgetCollection()
セクションタイトル: Astro.glob()とgetCollection()コンテンツコレクションは、Astro.glob()
の代わりに複数のファイルを読み込むためのgetCollection()
API (EN)を提供します。コンテンツファイル(Markdown、MDX、Markdocなど)がsrc/content/
ディレクトリ内のコレクションに配置されている場合、getCollection()
を使用してコレクションのクエリを行い、コンテンツのエントリーを返します。
WASM
セクションタイトル: WASMAstroは、ブラウザのWebAssembly
APIを使用して、WASMファイルをアプリケーションに直接読み込むことをサポートしています。
Nodeビルトイン
セクションタイトル: NodeビルトインAstroのユーザーには、可能な限りNode.jsのビルトイン(fs
、path
など)を避けることをおすすめします。Astroは、アダプター (EN)を使用して複数のランタイムと互換性があります。これには、fs
などのNodeビルトインモジュールをサポートしないDenoやCloudflare Workers (EN)が含まれます。
私たちの目的は、一般的なNode.jsのビルトインに対するAstroの代替機能を提供することです。しかし、今のところそのような代替機能は存在しません。ですから、もし本当にこれらのビルトインモジュールを使う必要があるのなら、それを止めたいとは思いません。AstroはNode.jsのビルトインを、Nodeの新しいプレフィックスであるnode:
を使ってサポートしています。たとえば、ファイルを読み込む場合、次のようにします。
ファイル形式のサポートを拡張
セクションタイトル: ファイル形式のサポートを拡張Viteと互換性のあるRollupプラグインを使用すると、Astroがネイティブでサポートしていないファイル形式をインポートできます。必要なプラグインがどこにあるかは、Viteドキュメントのプラグインの検索セクションを参照してください。
設定オプションや正しいインストール方法については、プラグインのドキュメントを参照してください。