Nuxt レイヤーの作成
Nuxt はデフォルトのファイルや設定を拡張するための強力なシステムを提供します。
Nuxt レイヤーは、モノレポ内や git リポジトリ、npm パッケージから部分的な Nuxt アプリケーションを共有および再利用するための強力な機能です。レイヤーの構造は標準的な Nuxt アプリケーションとほぼ同じであるため、作成や管理が容易です。
こちらも参照 getting-started > layers最小限の Nuxt レイヤーディレクトリには、レイヤーであることを示すために nuxt.config.ts
ファイルを含める必要があります。
export default defineNuxtConfig({})
さらに、レイヤーディレクトリ内の特定の他のファイルは自動的にスキャンされ、このレイヤーを拡張するプロジェクトで Nuxt によって使用されます。
components/*
- デフォルトのコンポーネントを拡張composables/*
- デフォルトのコンポーザブルを拡張layouts/*
- デフォルトのレイアウトを拡張pages/*
- デフォルトのページを拡張plugins/*
- デフォルトのプラグインを拡張server/*
- デフォルトのサーバーエンドポイントとミドルウェアを拡張utils/*
- デフォルトのユーティリティを拡張nuxt.config.ts
- デフォルトの nuxt 設定を拡張app.config.ts
- デフォルトのアプリ設定を拡張
基本的な例
export default defineNuxtConfig({
extends: [
'./base'
]
})
スターターテンプレート
始めるには、nuxt/starter/layer テンプレートを使用してレイヤーを初期化できます。これにより、構築可能な基本構造が作成されます。始めるには、ターミナルで次のコマンドを実行します:
npm create nuxt -- --template layer nuxt-layer
次のステップについては README の指示に従ってください。
レイヤーの公開
レイヤーはリモートソースまたは npm パッケージを使用して公開および共有できます。
Git リポジトリ
Git リポジトリを使用して Nuxt レイヤーを共有できます。いくつかの例を示します:
export default defineNuxtConfig({
extends: [
'github:username/repoName', // GitHub リモートソース
'github:username/repoName/base', // /base ディレクトリ内の GitHub リモートソース
'github:username/repoName#dev', // dev ブランチからの GitHub リモートソース
'github:username/repoName#v1.0.0', // v1.0.0 タグからの GitHub リモートソース
'gitlab:username/repoName', // GitLab リモートソースの例
'bitbucket:username/repoName', // Bitbucket リモートソースの例
]
})
プライベートなリモートソースを拡張したい場合は、トークンを提供するために環境変数 GIGET_AUTH=<token>
を追加する必要があります。
セルフホストの GitHub または GitLab インスタンスからリモートソースを拡張したい場合は、その URL を GIGET_GITHUB_URL=<url>
または GIGET_GITLAB_URL=<url>
環境変数で提供する必要があります。または、nuxt.config
の auth オプションで直接設定します。
リモートソースをレイヤーとして拡張する場合、その依存関係を Nuxt の外部でアクセスすることはできません。例えば、リモートレイヤーが eslint プラグインに依存している場合、それはあなたの eslint 設定で使用できません。これは、これらの依存関係が特別な場所 (node_modules/.c12/layer_name/node_modules/
) に配置され、パッケージマネージャーからアクセスできないためです。
git リモートソースを使用する場合、レイヤーに npm 依存関係があり、それをインストールしたい場合は、レイヤーオプションで install: true
を指定することで可能です。
export default defineNuxtConfig({
extends: [
['github:username/repoName', { install: true }]
]
})
npm パッケージ
Nuxt レイヤーを拡張したいファイルや依存関係を含む npm パッケージとして公開できます。これにより、設定を他の人と共有したり、複数のプロジェクトで使用したり、プライベートに使用したりできます。
npm パッケージから拡張するには、モジュールが npm に公開され、ユーザーのプロジェクトに devDependency としてインストールされていることを確認する必要があります。その後、現在の nuxt 設定を拡張するためにモジュール名を使用できます:
export default defineNuxtConfig({
extends: [
// スコープ付きの Node モジュール
'@scope/moduleName',
// または単にモジュール名
'moduleName'
]
})
レイヤーディレクトリを npm パッケージとして公開するには、package.json
に正しいプロパティが記入されていることを確認する必要があります。これにより、パッケージが公開されるときにファイルが含まれることが保証されます。
{
"name": "my-theme",
"version": "1.0.0",
"type": "module",
"main": "./nuxt.config.ts",
"dependencies": {},
"devDependencies": {
"nuxt": "^3.0.0"
}
}
レイヤーでインポートされた依存関係は 明示的に dependencies
に追加されていることを確認してください。nuxt
依存関係や、公開前にレイヤーをテストするためだけに使用されるものは、devDependencies
フィールドに残しておくべきです。
これで、モジュールを npm に公開する準備が整いました。公開は公開またはプライベートのいずれかで行えます。
レイヤーをプライベートな npm パッケージとして公開する場合、npm にログインしてノードモジュールをダウンロードするために認証する必要があります。
ヒント
名前付きレイヤーエイリアス
自動スキャンされたレイヤー(~~/layers
ディレクトリから)は自動的にエイリアスを作成します。例えば、~~/layers/test
レイヤーに #layers/test
でアクセスできます。
他のレイヤーに名前付きレイヤーエイリアスを作成したい場合は、レイヤーの設定で名前を指定できます。
export default defineNuxtConfig({
$meta: {
name: 'example',
},
})
これにより、レイヤーを指す #layers/example
のエイリアスが生成されます。
相対パスとエイリアス
レイヤーのコンポーネントやコンポーザブルでグローバルエイリアス(~/
や @/
など)を使用してインポートする場合、これらのエイリアスはユーザーのプロジェクトパスに対して解決されることに注意してください。回避策として、相対パスを使用してインポートするか、名前付きレイヤーエイリアスを使用できます。
また、レイヤーの nuxt.config
ファイルで相対パスを使用する場合(ネストされた extends
を除く)、それらはレイヤーではなくユーザーのプロジェクトに対して解決されます。回避策として、nuxt.config
で完全に解決されたパスを使用します:
import { fileURLToPath } from 'url'
import { dirname, join } from 'path'
const currentDir = dirname(fileURLToPath(import.meta.url))
export default defineNuxtConfig({
css: [
join(currentDir, './assets/main.css')
]
})
Nuxt モジュールのためのマルチレイヤーサポート
内部配列 nuxt.options._layers
を使用して、モジュールのカスタムマルチレイヤー処理をサポートできます。
export default defineNuxtModule({
setup(_options, nuxt) {
for (const layer of nuxt.options._layers) {
// 各レイヤーのカスタムディレクトリの存在を確認して拡張できます
console.log('カスタム拡張', layer.cwd, layer.config)
}
}
})
注意事項:
_layers
配列の先頭の項目は優先度が高く、後の項目を上書きします- ユーザーのプロジェクトは
_layers
配列の最初の項目です
より深く理解する
設定の読み込みと拡張サポートは unjs/c12 によって処理され、unjs/defu を使用してマージされ、リモート git ソースは unjs/giget を使用してサポートされています。詳細を知るには、ドキュメントやソースコードを確認してください。
こちらも参照 github.com > nuxt > nuxt > issues > 13367※このページは Nuxt.js 公式ドキュメントの翻訳ページ(非公式)です。
公式ドキュメントの該当ページはこちら:
https://nuxt.com/docs/3.x/guide/going-further/layers