build プロパティ
Nuxt では、webpack の設定をカスタマイズして web アプリケーションを思いのままに構築することができます。
analyze
Nuxt では webpack-bundle-analyzer を使ってバンドルファイルと最適化の仕方を視覚化できます。
-
型:
BooleanまたはObject -
デフォルト:
false
オブジェクトの場合、利用できるプロパティについてこちら を参照してください。
export default {
build: {
analyze: true,
// または
analyze: {
analyzerMode: 'static'
}
}
}
yarn nuxt build --analyze または yarn nuxt build -a コマンドを使って、アプリケーションをビルドし、バンドルアナライザを http://localhost:8888 で起動できます。yarn を使っていない場合は npx を使って実行できます。corejs
[email protected] 以降、Nuxt は
core-jsの現在のバージョンを自動的に検出します。また、使用するバージョンを指定することもできます。
-
型:
number|string(有効な値は'auto'、2そして3です) -
デフォルト:
'auto'
babel
JavaScript や Vue ファイル用に Babel の設定をカスタマイズします。デフォルトでは
.babelrcは無視されます。
-
型:
Object -
babel-loaderオプション と babel オプション を参照してください -
デフォルト:
{ babelrc: false, cacheDirectory: undefined, presets: ['@nuxt/babel-preset-app'] }
@nuxt/babel-preset-app のデフォルトのターゲットは client ビルドでは ie: '9'、server ビルドでは node: 'current' です。
presets
-
型:
Function -
引数:
-
Object: { isServer: true | false } -
Array:-
プリセット名
@nuxt/babel-preset-app -
@nuxt/babel-preset-appのオプション
-
プリセット名
-
注意: build.babel.presets で設定されたプリセットはクライアントとサーバー両方のビルドに適用されます。ターゲットは(クライアント/サーバー)それぞれに応じて Nuxt によって設定されます。クライアントビルドとサーバービルドで異なるプリセットの設定をしたい場合は、関数として presets を使用してください:
以下のカスタマイズの代わりにデフォルトのプリセットを使用することを強くおすすめします
export default {
build: {
babel: {
presets({ isServer }, [ preset, options ]) {
// change options directly
options.targets = isServer ? ... : ...
options.corejs = ...
// return nothing
}
}
}
}
またはプリセットのリスト全体を返すことによってデフォルトの値を上書きします:
export default {
build: {
babel: {
presets({ isServer }, [preset, options]) {
return [
[
preset,
{
targets: isServer ? ... : ...,
...options
}
],
[
// 他のプリセット
]
]
}
}
}
}
cache
-
型:
Boolean -
デフォルト:
false - ⚠️ 実験的機能
terser-webpack-plugin と cache-loader を使ってキャッシュを有効化します
cssSourceMap
-
型:
boolean -
デフォルト: 開発モードでは
true、プロダクションモードではfalse
CSS ソースマップのサポートを有効にします
devMiddleware
-
型:
Object
利用できるオプションは webpack-dev-middleware を参照してください。
devtools
-
型:
boolean -
デフォルト:
false
vue-devtools の検査を許可するかどうかを設定します。
既に nuxt.config.js などで有効化している場合は、このフラグに関係なく devtools が有効になります。
extend
クライアント及びサーバーのバンドルについて webpack の設定を手動で拡張します。
-
型:
Function
extend メソッドは一度はサーバーのバンドルのため、一度はクライアントのバンドルのため、計二度呼び出されます。メソッドの引数は次のとおりです:
- webpack 設定オブジェクト
-
次のキーを持つオブジェクト(
loadersを除きすべて真偽値):isDev、isClient、isServer、loaders
isClient と isServer は context で利用可能なキーとは別物です。これらのキーは非推奨では**ありません。**ここでは、process.client および process.server は undefined となるため使用しないでくださいexport default {
build: {
extend(config, { isClient }) {
// クライアントのバンドルの webpack 設定のみを拡張する
if (isClient) {
config.devtool = 'source-map'
}
}
}
}
デフォルトの webpack の設定についてもう少し見たい場合は webpack ディレクトリ を参照してください。
extend での loaders
loaders は build.loaders と同じオブジェクト構造を持っているため、extend 内部の loaders のオプションを変えることができます。
export default {
build: {
extend(config, { isClient, loaders: { vue } }) {
// クライアントのバンドルの webpack 設定のみを拡張する
if (isClient) {
vue.transformAssetUrls.video = ['src', 'poster']
}
}
}
}
extractCSS
Vue サーバーサイドレンダリングガイドライン を使って共通の CSS を抽出できるようにします。
-
型:
BooleanまたはObject -
デフォルト:
false
内部で extract-css-chunks-webpack-plugin が使われ、全ての CSS は別々のファイルに、通常はコンポーネントごとに 1 つ抽出されます。これは CSS と JavaScript を別々にキャッシュすることを可能にし、多くのグローバルまたは共通 CSS が存在する場合には試してみる価値があります。
例 (nuxt.config.js):
export default {
build: {
extractCSS: true,
// またh
extractCSS: {
ignoreOrder: true
}
}
}
全ての CSS を 1 つのファイルに抽出したい場合があります。このための回避策があります:
export default {
build: {
extractCSS: true,
optimization: {
splitChunks: {
cacheGroups: {
styles: {
name: 'styles',
test: /\.(css|vue)$/,
chunks: 'all',
enforce: true
}
}
}
}
}
}
filenames
バンドルのファイル名をカスタマイズします。
-
型:
Object -
デフォルト:
{ app: ({ isDev, isModern }) => isDev ? `[name]${isModern ? '.modern' : ''}.js` : `[contenthash:7]${isModern ? '.modern' : ''}.js`, chunk: ({ isDev, isModern }) => isDev ? `[name]${isModern ? '.modern' : ''}.js` : `[contenthash:7]${isModern ? '.modern' : ''}.js`, css: ({ isDev }) => isDev ? '[name].css' : 'css/[contenthash:7].css', img: ({ isDev }) => isDev ? '[path][name].[ext]' : 'img/[name].[contenthash:7].[ext]', font: ({ isDev }) => isDev ? '[path][name].[ext]' : 'fonts/[name].[contenthash:7].[ext]', video: ({ isDev }) => isDev ? '[path][name].[ext]' : 'videos/[name].[contenthash:7].[ext]' }
この例ではチャンク名を数値の id に変更します:
export default {
build: {
filenames: {
chunk: ({ isDev }) => (isDev ? '[name].js' : '[id].[contenthash].js')
}
}
}
manifest の使い方をより理解するためにこの webpack ドキュメント を参照してください。
friendlyErrors
-
型:
Boolean -
デフォルト:
true(上書きが有効)
FriendlyErrorsWebpackPlugin を使って上書きを有効にするか無効にするかを設定します。
hardSource
-
型:
Boolean -
デフォルト:
false - ⚠️ 実験的機能
キャッシュを改善するために HardSourceWebpackPlugin を有効にします。
hotMiddleware
-
型:
Object
利用できるオプションは webpack-hot-middleware を参照してください。
html.minify
-
型:
Object - デフォルト:
{
collapseBooleanAttributes: true,
decodeEntities: true,
minifyCSS: true,
minifyJS: true,
processConditionalComments: true,
removeEmptyAttributes: true,
removeRedundantAttributes: true,
trimCustomFragments: true,
useShortDoctype: true
}
注意: html.minify に変更を加えても、それらはデフォルトとマージされません!
ビルドプロセス中に作成された HTML ファイルを最小化するために使用される html-minifier プラグインの設定(すべてのモード に適用されます)。
indicator
開発モードにおいて hot module replacement のビルドインジケータを表示する(
v2.8.0以上から利用可能)
-
型:
Boolean -
デフォルト:
true

loaders
Nuxt に統合された webpack loaders のカスタマイズオプション
-
型:
Object - デフォルト:
{
file: {},
fontUrl: { limit: 1000 },
imgUrl: { limit: 1000 },
pugPlain: {},
vue: {
transformAssetUrls: {
video: 'src',
source: 'src',
object: 'src',
embed: 'src'
}
},
css: {},
cssModules: {
localIdentName: '[local]_[hash:base64:5]'
},
less: {},
sass: {
indentedSyntax: true
},
scss: {},
stylus: {},
vueStyle: {}
}
注意:
nuxt.config.jsの設定で指定するだけでなく、build.extend でも設定を変更することができます
loaders.file
詳細は file-loader オプション を参照してください。
loaders.fontUrl と loaders.imgUrl
詳細は url-loader オプション を参照してください。
loaders.pugPlain
詳細は pug-plain-loader または Pug compiler オプション を参照してください。
loaders.vue
詳細は vue-loader オプション を参照してください。
loaders.css と loaders.cssModules
詳細は css-loader オプション を参照してください。注意: cssModules は CSS Modules を使うための loader オプションです。
loaders.less
Less specific オプションは
loaders.lessを介してless-loaderに渡すことができます。dash-case で利用可能な全てのオプションについては Less のドキュメント を参照してください。
loaders.sass と loaders.scss
利用可能な Sass のオプションについては Sass ドキュメント を参照してください。注意:
loaders.sassは Sass Indented Syntax 用です。
loaders.vueStyle
詳細は vue-style-loader オプション を参照してください。
optimization
-
型:
Object -
デフォルト:
{ minimize: true, minimizer: [ // terser-webpack-plugin // optimize-css-assets-webpack-plugin ], splitChunks: { chunks: 'all', automaticNameDelimiter: '.', name: undefined, cacheGroups: {} } }
dev または analyze モードでは splitChunks.name のデフォルト値は true です。
カスタマイズされたプラグインの配列に minimizer を設定するか、minimize を false にすることで全ての minimizer を無効にできます。(minimize はデフォルトで開発用に無効になっています)
Webpack の最適化 を参照してください。
optimizeCSS
-
型:
ObjectまたはBoolean -
デフォルト:
-
false -
extractCSS が有効になるときは
{}
-
OptimizeCSSAssets プラグインのオプションです。
NMFR/optimize-css-assets-webpack-plugin を参照してください。
parallel
-
型:
Boolean -
デフォルト:
false - ⚠️ 実験的機能
webpack のビルドで thread-loader を有効にする
plugins
webpack プラグインを追加する
-
型:
Array -
デフォルト:
[]
import webpack from 'webpack'
import { version } from './package.json'
export default {
build: {
plugins: [
new webpack.DefinePlugin({
'process.VERSION': version
})
]
}
}
postcss
PostCSS Loader プラグインをカスタマイズします
-
型:
Array(レガシーな場合はデフォルトで上書きします)、Object(推奨)、FunctionまたはBoolean
注意: Nuxt は PostCSS Preset Env を適用しました。デフォルトでは、Stage 2 機能 と Autoprefixer が有効になっていますが、build.postcss.presetを使って設定できます。 -
デフォルト:
nuxt.config.js
{ plugins: { 'postcss-import': {}, 'postcss-url': {}, 'postcss-preset-env': this.preset, 'cssnano': { preset: 'default' } // 開発モードでは無効化されています }, order: 'presetEnvAndCssnanoLast', preset: { stage: 2 } }
カスタムプラグイン設定は、デフォルトのプラグイン設定にマージされます (Object のかわりに Array を使っている場合を除きます)。
export default {
build: {
postcss: {
plugins: {
// `postcss-url` の無効化
'postcss-url': false,
// プラグインの追加
'postcss-nested': {},
'postcss-responsive-type': {},
'postcss-hexrgba': {}
},
preset: {
autoprefixer: {
grid: true
}
}
}
}
}
postcss の設定が Object の場合、プラグインの順番の定義に order が利用できます:
-
型:
Array(順序付けされたプラグイン名)、String(順序プリセット名)、Function -
デフォルト:
cssnanoLast(最後にcssnanoを配置する)
export default {
build: {
postcss: {
// プリセット名
order: 'cssnanoLast',
// 順序付けされたプラグイン名
order: ['postcss-import', 'postcss-preset-env', 'cssnano']
// プラグインの順番を算出するための関数
order: (names, presets) => presets.cssnanoLast(names)
}
}
}
postcss plugins と @nuxtjs/tailwindcss
@nuxtjs/tailwindcss の設定で postcss プラグイン(例えば postcss-pxtorem)を適用したい場合、順番を変更して最初に tailwindcss を読み込む必要があります。
この設定は nuxt-purgecss には影響しません。
import { join } from 'path'
export default {
// ...
build: {
postcss: {
plugins: {
tailwindcss: join(__dirname, 'tailwind.config.js'),
'postcss-pxtorem': {
propList: ['*', '!border*']
}
}
}
}
}
profile
-
型:
Boolean -
デフォルト: コマンドライン引数
--profileで有効にします
WebpackBar の profiler で有効にします
publicPath
Nuxt ではパフォーマンスの最大化のため dist ディレクトリ内のファイルを CDN にアップロードすることも可能です。そのためにはまず
publicPathに CDN を指定します。
-
型:
String -
デフォルト:
'/_nuxt/'
export default {
build: {
publicPath: 'https://cdn.nuxtjs.org'
}
}
設定後、nuxt build を実行する際に .nuxt/dist/client ディレクトリの内容を CDN にアップロードしてください。
Nuxt v2.15 以降では、実行時にこのプロパティの値を変更すると、既にビルドされているアプリケーションの設定が上書きされます。
quiet
ビルド出力ログの大半を抑制します
-
型:
Boolean -
デフォルト: std-env によって
CIまたはtest環境で検出された際に有効になります
splitChunks
-
型:
Object -
デフォルト:
nuxt.config.js
export default { build: { splitChunks: { layouts: false, pages: true, commons: true } } }
layout、pages や commons で分割したコードの場合(共通ライブラリ:vue|vue-loader|vue-router|vuex...)
ssr
SSR レンダラー用の webpack バンドルを作成します。
-
型:
Boolean -
デフォルト: ユニバーサルモードでのデフォルト値は
true、spa モードでのデフォルト値はfalse
このオプションは、指定されていない場合は mode 値に基づいて自動的に設定されます。
standalone
サーバービルドにおいて依存関係をインラインでバンドル(アドバンスド)
-
型:
Boolean -
デフォルト:
false
このモードは通常サーバービルドで外部として保存される node_modules をバンドルします(詳細 )
nuxt.config 、サーバーミドルウェア、静的ディレクトリ)はバンドルされていません。この機能は、server-bundle での webpack-externals の使用のみを無効にします。yarnnuxt build --standalone を使用して、コマンドラインでこのモードを有効にすることができます。( yarn を使用していない場合は、 npx を使用してコマンドを実行できます)styleResources
-
型:
Object -
デフォルト:
{}
毎回インポートせずに変数やミックスインをページに挿入する必要がある場合に便利です。
Nuxt はこの動作を実現するために https://github.com/yenshih/style-resources-loader を使用しています。
特定のプリプロセッサ(less、sass、scss または stylus)に含めるパターン/パスを指定する必要があります:
ここではパスのエイリアス(~ や @)を使用することができないため、相対パスまたは絶対パスを使用する必要があります。
{
build: {
styleResources: {
scss: './assets/variables.scss',
less: './assets/*.less',
// sass: ...,
// scss: ...
options: {
// https://github.com/yenshih/style-resources-loader#options の
// `patterns` プロパティ以外を参照してください
}
}
}
}
templates
Nuxt では設定に基づいてレンダリングされる独自のテンプレートを提供できます。この機能はモジュールを使う場合にとりわけ便利です。
-
型:
Array
export default {
build: {
templates: [
{
src: '~/modules/support/plugin.js', // `src` は絶対パスもしくは相対パスで指定してください
dst: 'support.js', // `dst` は `.nuxt` ディレクトリからみた相対パスです
options: {
// Options は `options` キーとしてテンプレートに提供されます
live_chat: false
}
}
]
}
}
テンプレートは lodash.template を使ってレンダリングされます。こちら でより詳細な使い方を知ることができます。
terser
-
型:
ObjectまたはBoolean - デフォルト:
{
parallel: true,
cache: false,
sourceMap: false,
extractComments: {
filename: 'LICENSES'
},
terserOptions: {
output: {
comments: /^\**!|@preserve|@license|@cc_on/
}
}
}
Terser プラグインのオプションです。false を設定するとこのプラグインは無効になります。
sourceMap を有効にすると、webpack の config.devtool が source-map に設定されている場合、各出力ファイルの最後に //# sourceMappingURL というリンクコメントが残ります。
webpack-contrib/terser-webpack-plugin を参照してください
transpile
-
型:
Array<String | RegExp | Function> -
デフォルト:
[]
特定の依存関係を Babel でトランスパイルしたい場合、build.transpile を追加することができます。transpile の項目はパッケージ名や依存関係のファイル名にマッチする文字列または正規表現オブジェクトになります。
v2.9.0 からは条件付きでトランスパイルするために関数を使うこともできます。関数はオブジェクト({ isDev, isServer, isClient, isModern, isLegacy })を受け取ります:
{
build: {
transpile: [({ isLegacy }) => isLegacy && 'ky']
}
}
この例では、Nuxt がmodern mode でない場合、kyは Babel によってトランスパイルされます。
vueLoader
注意: この設定は Nuxt 2.0 から削除されました。代わりに
build.loaders.vueを使ってください。
-
型:
Object -
デフォルト:
nuxt.config.js
{ productionMode: !this.options.dev, transformAssetUrls: { video: 'src', source: 'src', object: 'src', embed: 'src' } }
Vue Loader オプション を指定します。
watch
監視や変更後に再生成を行うカスタムファイルを提供することができます。この機能はモジュール を使用する場合にとりわけ便利です。
-
型:
Array<String>
export default {
build: {
watch: ['~/.nuxt/support.js']
}
}
followSymlinks
デフォルトでは、ビルドプロセスはシンボリックリンク内のファイルをスキャンしません。この boolean 値はスキャンするかどうかを含むため、followSymlinks を true に設定すると例えば "pages" フォルダなどでフォルダ内のシンボリックリンクを使うことができます。
-
型:
Boolean
export default {
build: {
followSymlinks: true
}
}