設定
Nuxt ではデフォルトの設定でほとんどのユースケースをカバーしています。nuxt.config.js を使ってこの設定を上書きすることができます。
css プロパティ
グローバルに(すべてのページで)適用したい CSS ファイル/モジュール/ライブラリを設定できます。
sass を利用したい場合は node-sass と sass-loader パッケージをインストールしてください。nuxt.config.js で CSS リソースを追加するには:
export default {
css: [
// Node.js モジュールを直接ロードする(ここでは Sass ファイル)
'bulma',
// プロジェクト内の CSS ファイル
'~/assets/css/main.css',
// プロジェクト内の SCSS ファイル
'~/assets/css/main.scss'
]
}
スタイルの拡張
nuxt の設定ファイルで、css プロパティの配列に記述する CSS/SCSS/Postcss/Less/Stylus/ などのファイルの拡張子は省略することができます。
export default {
css: ['~/assets/css/main', '~/assets/css/animations']
}
main.scss と main.css のような同じ名前の 2 つのファイルが存在し、css: ['~/assets/css/main'] のように css 配列中で拡張子を明示しなかった場合、styleExtensions の順番に応じて 1 つのファイルだけが読み込まれます。このケースの場合、css がデフォルトの styleExtension の配列の中で最初に登場するため、css ファイルだけが読み込まれ scss ファイルは無視されます。デフォルトの順番: ['css', 'pcss', 'postcss', 'styl', 'stylus', 'scss', 'sass', 'less']
プリプロセッサ
Vue Loader のおかげで、lang 属性を使うだけで <template> や <style> などのためのさまざまなプリプロセッサを使うことができます。
Pug と Sass を使った pages/index.vue の例:
<template lang="pug">
h1.red Hello {{ name }}!
</template>
<style lang="scss">
.red {
color: red;
}
</style>
これらのプリプロセッサを使うために Webpack のローダをインストールする必要があります:
yarn add --dev pug pug-plain-loader
yarn add --dev sass sass-loader@10
npm install --save-dev pug pug-plain-loader
npm install --save-dev sass sass-loader@10
外部のリソース
グローバルの設定
ヘッドオブジェクトまたは関数に外部リソースを含めることができます。head API ドキュメント で説明したように、次の例ではオブジェクトや関数として head の使い方を示します。もし計算されたプロパティやデータなど、Vue コンポーネントの値を使いたい場合は、 head() 関数を使って最終的な head オブジェクトを返すことができます。オプションの body: true を各リソースに渡して、閉じる </body> タグの前にリソースを含めることもできます。
nuxt.config.js(ここでは head オブジェクト)にリソースを含めます:
export default {
head: {
script: [
{
src: 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js'
}
],
link: [
{
rel: 'stylesheet',
href: 'https://fonts.googleapis.com/css?family=Roboto&display=swap'
}
]
}
}
ローカルの設定
pages/ ディレクトリ(ここでは head 関数)内の .vue ファイルにリソースを含めます:
<template>
<h1>About page with jQuery and Roboto font</h1>
</template>
<script>
export default {
head() {
return {
script: [
{
src: 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js'
}
],
link: [
{
rel: 'stylesheet',
href: 'https://fonts.googleapis.com/css?family=Roboto&display=swap'
}
]
}
}
}
</script>
<style scoped>
h1 {
font-family: Roboto, sans-serif;
}
</style>
PostCSS プラグイン
もし存在する場合、プロジェクトディレクトリにある postcss.config.js の名前を変更するか削除します。そして nuxt.config.js ファイルに以下を追加します:
export default {
build: {
postcss: {
// プラグイン名をキーとして、引数を値として追加します
// npm または yarn を使って依存関係としてこれらを事前にインストールします
plugins: {
// false を値として渡しプラグインを無効にします
'postcss-url': false,
'postcss-nested': {},
'postcss-responsive-type': {},
'postcss-hexrgba': {}
},
preset: {
// false を値として渡しプラグインを無効にします
autoprefixer: {
grid: true
}
}
}
}
}
JSX
Nuxt は babel のデフォルトの設定用の公式の @vue/babel-preset-app をベースにした @nuxt/babel-preset-app を使用しています。そのため、コンポーネントに JSX を使うことができます。
コンポーネントの render メソッド内で JSX が使えます:
export default {
data () {
return { name: 'World' }
},
render (h) {
return <h1 class="red">{this.name}</h1>
}
}
createElement を h にエイリアスすることは、Vue のエコシステムで見られる共通の慣例です。しかしその慣例は JSX では任意です。なぜなら ES2015 の構文で宣言された(関数またはアロー関数ではない)JSX で書かれた任意のメソッドやゲッターには const h = this.$createElement が自動的に注入 されるためです。よって (h) パラメータは削除することができます。
JSX の使い方をより深く理解するには Vue.js ドキュメントの JSX セクション を参照してください。
ファイルの無視
.nuxtignore
.nuxtignore を使用することで、ビルド時にプロジェクトルート(rootDir)にある layout、page、store そして middleware のファイルを Nuxt に無視させることができます。.nuxtignore ファイルは .gitignore や .eslintignore と同じ仕様に従います。各行はどのファイルを無視するかを示す glob パターンです。
# foo.vue レイアウトを無視する
layouts/foo.vue
# ファイル名が -ignore.vue で終わるレイアウトファイルを無視する
layouts/*-ignore.vue
# bar.vue ページを無視する
pages/bar.vue
# ignore フォルダにあるページを無視する
pages/ignore/*.vue
# bar.js ストアを無視する
store/baz.js
# _.test._ にマッチするストアファイルを無視する
store/ignore/_.test._
# foo フォルダにある foo/bar.js 以外のミドルウェアファイルと無視する
middleware/foo/*.js !middleware/foo/bar.js
ignorePrefix プロパティ
pages/、layout/、middleware/ や store/ ディレクトリに含まれる、ファイル名が ignorePrefix プロパティで指定された接頭辞から始まっているファイルはビルド時に無視されます。
デフォルトでは - から始まる store/-foo.js や pages/-bar.vue のようなファイルはすべて無視されます。これにより、ルートやストア等に変換されることなく、呼び出し元と同じ場所にテスト、ユーティリティ、コンポーネントなどのファイルを置くことができます。
ignore プロパティ
ignorePrefix よりカスタマイズしやすいです: ignore プロパティに指定した glob パターンと一致するすべてのファイルがビルド時に無視されます。
export default {
ignore: 'pages/bar.vue'
}
ignoreOptions
nuxtignore は内部で node-ignore を使用しています。ignoreOptions は node-ignore の options として設定されます。
export default {
ignoreOptions: {
ignorecase: false
}
}
webpack config を拡張する
nuxt.config.js 内の extend オプションを通して nuxt の webpack 設定を拡張できます。build プロパティの extend オプションは 2 つの引数を受け取る関数です。 第一引数は nuxt の webpack 設定からエクスポートされた webpack config オブジェクトです。第二引数はこれらの Boolean 型のプロパティを持つ context オブジェクトです: { isDev, isClient, isServer, loaders }。
export default {
build: {
extend(config, { isDev, isClient }) {
// ..
config.module.rules.push({
test: /\.(ttf|eot|svg|woff(2)?)(\?[a-z0-9=&.]+)?$/,
loader: 'file-loader'
})
// `isDev` が true の場合、webpack を開発モードに設定します。
if (isDev) {
config.mode = 'development'
}
}
}
}
extend メソッドは 2 回呼び出されます - 1 回目はクライアントのバンドルため、もう 1 回はサーバーのバンドルのためです。
チャンク設定をカスタマイズする
デフォルトのオブジェクトを書き換えずに最適化設定 を微調整することができます。
export default {
build: {
extend(config, { isClient }) {
if (isClient) {
config.optimization.splitChunks.maxSize = 200000
}
}
}
}
webpack 設定の検査
複雑なプロジェクトやデバッグの場合、最終的な webpack 構成がどのようになるかを確認すると便利な場合があります。幸い、プロジェクトから nuxt webpack コマンドを実行して設定を出力できます。詳細については、GitHub のプルリクエスト #7029 を確認してください。
webpack プラグインの追加
nuxt.config.js ファイルの build オプションを使うと、webpack.config.js ファイル と同じ方法で webpack plugins を渡すことができます。
この例では JavaScript モジュール(lodash と jQuery)を import や require するかわりに自動的にロードする webpack ビルトインの ProvidePlugin を追加します。
import webpack from 'webpack'
export default {
build: {
plugins: [
new webpack.ProvidePlugin({
// グローバルモジュール
$: 'jquery',
_: 'lodash'
})
]
}
}
注意: Vue ベースのアプリケーションでは jQuery は必要ないかもしれません。
Nuxt を使うと、プラグインの実行コンテキストを制御することもできます。もしプラグインが build.extend 内の client または server ビルド(または dev ビルドと prod ビルドを区別する)で実行されることを意図している場合 、webpack プラグインを手動で渡すこともできます。
Webpack を拡張してオーディオファイルをロードする
オーディオファイルは file-loader で処理する必要があります。このローダーはすでにデフォルトの Webpack 設定に含まれていますが、オーディオファイルを処理するように設定されていません。nuxt.config.js でデフォルトの設定を拡張する必要があります:
export default {
build: {
extend(config, ctx) {
config.module.rules.push({
test: /\.(ogg|mp3|wav|mpe?g)$/i,
loader: 'file-loader',
options: {
name: '[path][name].[ext]'
}
})
}
}
}
これでオーディオファイルを <audio :src="require('@/assets/water.mp3')" controls></audio> のようにインポートできます。
<audio src="@/assets/water.mp3" controls></audio> だけ書きたい場合、src 属性でこれらを参照する際に vue-loader に自動的にオーディオファイルを要求するように支持する必要があります:
export default {
build: {
loaders: {
vue: {
transformAssetUrls: {
audio: 'src'
}
}
},
extend(config, ctx) {
config.module.rules.push({
test: /\.(ogg|mp3|wav|mpe?g)$/i,
loader: 'file-loader',
options: {
name: '[path][name].[ext]'
}
})
}
}
}
ホストとポート番号を編集する
デフォルトでは、Nuxt の開発サーバーのホストは localhost(ホストマシン内からのみアクセス可能)です。アプリケーションを他のデバイスで確認するにはホストを修正する必要があります。nuxt.config.js ファイルでホストを修正することができます。
ホストの '0.0.0.0' は、ホストマシンの外部からの接続(例えば LAN)でもアクセスが可能なホストアドレスを解決するように Nuxt に指示します。ホストに '0'(0 ではありません)や '0.0.0.0' という文字列が指定された場合、ローカル IP アドレスが Nuxt に割り振られます。
export default {
server: {
host: '0' // デフォルト: localhost
}
}
ポート番号をデフォルトの 3000 から変更することもできます。
export default {
server: {
port: 8000 // デフォルト: 3000
}
}
'0'(0 ではなく falsy)という文字列の値が指定された場合、ランダムなポートが Nuxt アプリケーションに割り振られます。nuxt.config.js ファイル内で変更することはできますが、サイトをホスティングする際に問題が発生する場合があるのでおすすめしません。dev コマンドで直接ホストとポートを指定することをおすすめします。
HOST=0 PORT=8000 npm run dev
または package.json 内でスクリプトを作成します。
"scripts": {
"dev:host": "nuxt --hostname '0' --port 8000"
}
非同期な設定
通常の export default {} を使用した設定をするのが望ましいですが、config オブジェクトを返却する非同期な関数をエクスポートすることで非同期な設定をすることができます。
import axios from 'axios'
export default async () => {
const data = await axios.get('https://api.nuxtjs.dev/posts')
return {
head: {
title: data.title
//... 残りの設定
}
}
}
nuxt.config.js 内で axios-module を使うことはできません。axios をインポートして再度設定する必要があります。さらなる設定
nuxt.config.js には、カスタマイズや設定オプションがたくさんあります! build の設定 ですべてのキーを確認しましょう。
Sébastien Chopin
Nazaré da Piedade
Nobu
川音리오
Maciek Palmowski
Nestor Vera
Daniel Roe
Yue Yang
Jeronimas
Clément Ollivier
Alexander Lichter
N3-rd
Adrien Zaganelli
Mag
Stefan Huber
Olga Bulat
Paiva
Florian Reuschel
Savas Vedova
HIJACK
Vinícius Alves
Kareem Dabbeet
Valentín Costa
Ryan Skinner
Alex Hirzel
Ajeet Chaulagain
René Eschke
Nico Devs
Muhammad
Naoki Hamada
Tom
Yann Aufray
Anthony Chu
Nuzhat Minhaz
Lucas Portet
Richard Schloss
Bobby
bpy
Antony Konstantinidis
Hibariya
Jose Seabra
Eze
Florian Lefebvre
Lucas Recoaro
Julien SEIXAS