理解自定义配置
你可以通过在项目的根目录中添加一个 nuxt.config.js
文件(在本书中我们将其称为 Nuxt
配置文件)来配置你的 Nuxt
应用程序以适应你的项目。如果你使用 Nuxt
脚手架工具,你将默认获得此文件。打开此文件时,你应该会看到以下选项(或属性):
// nuxt.config.js
export default {
mode: 'universal',
target: 'server',
head: { ... },
css: [],
plugins: [],
components: true,
buildModules: [],
modules: [],
build: {}
}
除了 mode
、target
、head
和 components
之外,大多数选项都是空的。你可以通过这些选项自定义 Nuxt
以专门适应你的项目。让我们逐个介绍这些选项,然后再介绍其他选项,看看你可以将它们用于什么。
mode 选项
mode
选项用于定义你的应用程序的 “性质” ——是通用应用程序还是 SPA
。它的默认值为 universal
。如果你使用 Nuxt
开发 SPA
,则将此值更改为 spa
。本书接下来的章节将重点介绍通用模式,第十五章 “使用 Nuxt
创建 SPA
” 除外。
target 选项
target
选项用于设置你的应用程序的部署目标——是部署为服务器端渲染应用程序还是静态生成应用程序。它的默认值为 server
,表示服务器端渲染部署。本书中大多数示例应用程序的部署目标都是服务器端渲染。我们将在一些章节(尤其是最后一章——第十八章 “使用 CMS
和 GraphQL
创建 Nuxt
应用”)中也将以静态生成部署为目标。
head 选项
head
选项用于定义应用程序 <head>
块中的所有默认 meta
标签。如果你使用 Nuxt
脚手架工具,你将在 Nuxt
配置文件中获得以下自定义 head
配置:
// nuxt.config.js
export default {
head: {
title: process.env.npm_package_name || '',
meta: [
{ charset: 'utf-8' },
{ name: 'viewport', content: 'width=device-width, initial-scale=1' },
{ hid: 'description', name: 'description', content:
process.env.npm_package_description || '' }
],
link: [
{ rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' }
]
}
}
你可以修改上述配置或添加更多自定义配置——例如,添加你的项目所需的某些 JavaScript
和 CSS
库:
// nuxt.config.js
export default {
head: {
titleTemplate: '%s - Nuxt App',
meta: [
//...
],
script: [
{ src: 'https://cdnjs.cloudflare.com/.../jquery.min.js' },
{ src: 'https://cdn.jsdelivr.net/.../foundation.min.js' },
],
link: [
{ rel: 'stylesheet', href:
'https://cdn.jsdelivr.net/.../foundation.min.css' },
]
}
}
我们将在第三章 “添加 UI 框架” 和第四章 “添加视图、路由和过渡效果” 中更详细地介绍此选项。请注意,jQuery
是 Foundation
(Zurb
) 的核心依赖项,我们将在第三章 “添加 UI 框架” 中探讨它。因此,目前你需要先在你的项目中安装 jQuery
才能使用 Foundation
。这在未来的版本中可能会成为可选的。
css 选项
css
选项用于添加全局 CSS
文件。这些文件可以是 .css
、.less
或 .scss
文件。它们也可以是直接从你的项目 Node.js /node_modules/
目录加载的模块和库。例如,考虑以下配置:
// nuxt.config.js
export default {
css: [
'jquery-ui-bundle/jquery-ui.min.css',
'@/assets/less/styles.less',
'@/assets/scss/styles.scss'
]
}
在上面的配置中,我们加载了安装在 /node_modules/
目录中的 jQuery UI
模块中的 CSS
文件,以及存储在 /assets/
目录中的 Less
和 Sass
文件。请注意,如果你使用 .less
和 .scss
文件编写样式,你需要安装 Less
和 Sass
模块及其 webpack
加载器,如下所示:
$ npm i less less-loader --save-dev
$ npm i node-sass --save-dev
$ npm i sass-loader --save-dev
我们将在第三章 “添加 UI
框架” 和第四章 “添加视图、路由和过渡效果” 中更多地使用此选项。
plugins 选项
plugins
选项用于添加在根 Vue
实例之前运行的 JavaScript
插件。例如:
// nuxt.config.js
export default {
plugins: ['~/plugins/vue-notifications']
}
我们通常将此选项与我们在上一节中介绍的 /plugins/
目录一起使用。我们将在第六章 “编写插件和模块” 中大量使用此选项。
components 选项
components
选项用于设置是否自动导入 /components/
目录中的组件。如果你有大量组件需要导入到布局或页面中,此选项非常有用。如果将此选项设置为 true
,则无需手动导入它们。它的默认值为 false
。本书中的所有应用程序都将此选项设置为 true
。
有关此选项的更多信息和(高级)用法,请访问 https://github.com/nuxt/components。 |
buildModules 选项
buildModules
选项用于注册仅在开发和构建时需要的构建模块。请注意,在本书中,我们只会在第六章 “编写插件和模块” 中利用 Nuxt
社区的一些模块并创建 Node.js
运行时所需的自定义模块。有关 buildModules
选项和仅用于构建时的构建模块的更多信息,请访问 https://nuxtjs.org/guide/modules#build-only-modules。
modules 选项
modules
选项用于向你的项目添加 Nuxt
模块。例如:
// nuxt.config.js
export default {
modules: [
'@nuxtjs/axios',
'~/modules/example.js'
]
}
我们也可以使用此选项直接创建内联模块:
// nuxt.config.js
export default {
modules: [
function () {
//...
}
]
}
Nuxt
模块本质上是 JavaScript
函数,就像插件一样。我们将在第六章 “编写插件和模块” 中讨论它们之间的区别。就像经常与 /plugins/
目录一起使用的 plugins
选项一样,modules
选项也经常与 /modules/
目录一起使用。我们将在第六章 “编写插件和模块” 中经常使用此选项。
build 选项
build
选项用于自定义用于构建你的 Nuxt
应用程序的 webpack
配置,以你喜欢的方式进行构建。例如,你可能希望在你的项目中全局安装 jQuery
,这样你就不必在每次需要时都使用 import
语句。你可以使用 webpack
的 ProvidePlugin
函数自动加载 jQuery
,如下所示:
// nuxt.config.js
import webpack from 'webpack'
export default {
build: {
plugins: [
new webpack.ProvidePlugin({
$: "jquery"
})
]
}
}
我们将在第四章 “添加视图、路由和过渡效果”、第六章 “编写插件和模块” 以及第十四章 “使用代码检查器、格式化工具和部署命令” 中再次使用此 build
选项。
有关你可以使用此选项为你的 有关 |
以下部分概述了你可以用来进一步和更具体地自定义你的 Nuxt
应用程序的一些附加选项。让我们探索一些在你的项目中可能有用的选项。本书中经常使用其中的一些选项。让我们开始吧!
dev 选项
dev
选项用于定义你的应用程序的开发或生产模式。它不会添加到 Nuxt
配置文件中,但你可以在需要时手动添加它。它只接受布尔类型,其默认设置为 true
。在使用 nuxt
命令时,它始终强制为 true
,而在使用 nuxt build
、nuxt start
和 nuxt generate
命令时,它始终强制为 false
。
因此,从技术上讲,你无法自定义它,但你可以在 Nuxt
模块中使用此选项,如下所示:
// modules/sample.js
export default function (moduleOptions) {
console.log(this.options.dev)
}
你将获得 true
或 false
,具体取决于你使用的 Nuxt
命令。我们将在第六章 “编写插件和模块” 中介绍此模块。或者,当你将 Nuxt
作为包导入到服务器端框架中时,可以使用此选项,如下所示:
// server/index.js
import { Nuxt, Builder } from 'nuxt'
import config from './nuxt.config.js'
const nuxt = new Nuxt(config)
if (nuxt.options.dev) {
new Builder(nuxt).build()
}
当 dev
选项为 true
时,将运行 new Builder(nuxt).build()
这行代码。我们将在第八章 “添加服务端框架” 中介绍服务器端框架。
你可以在我们的 |
rootDir 选项
rootDir
选项用于定义你的 Nuxt
应用程序的工作区。例如,假设你的项目位于以下位置:
/var/www/html/my-project/
那么,你的项目的 rootDir
选项的默认值为 /var/www/html/my-project/
。但是,你可以通过在你的 package.json
文件中使用 Nuxt
命令来更改它,如下所示:
{
"scripts": {
"dev": "nuxt ./app/"
}
}
现在,你的 Nuxt
应用程序的工作区位于 /var/www/html/my-project/app/
,你的应用程序结构已变为以下形式:
-| my-project/
---| node_modules/
---| app/
------| nuxt.config.js
------| pages/
------| components/
------| ...
---| package.json
请注意,现在 Nuxt
配置文件必须放在 /app/
目录中。我们将在第十四章 “使用代码检查器、格式化工具和部署命令” 中介绍 Nuxt
命令。
你可以在我们的 |
srcDir 选项
srcDir
选项用于定义你的 Nuxt
应用程序的源目录。srcDir
的默认值是 rootDir
的值。你可以按如下方式更改它:
// nuxt.config.js
export default {
srcDir: 'src/'
}
现在,你的应用程序结构已变为以下形式:
-| my-project/
---| node_modules/
---| src/
------| pages/
------| components/
------| ...
---| nuxt.config.js
---| package.json
请注意,Nuxt
配置文件位于 /src/
目录之外。
你可以在我们的 |
server 选项
server
选项用于配置你的 Nuxt
应用程序的服务器连接变量。它具有以下默认服务器连接详细信息:
export default {
server: {
port: 3000,
host: 'localhost',
socket: undefined,
https: false,
timing: false
}
}
你可以按如下方式更改它们:
export default {
server: {
port: 8080,
host: '0.0.0.0'
}
}
现在,你的应用程序运行在 0.0.0.0:8080
。
你可以在我们的 GitHub
仓库的 /chapter-2/configuration/server/
目录下找到此选项的示例应用程序。
env 选项
env
选项用于为你的 Nuxt
应用程序的客户端和服务器端设置环境变量。此选项的默认值是一个空对象 {}
。当你在项目中使用 axios
时,此选项非常有用。
考虑以下示例:
// nuxt.config.js
export default {
env: {
baseUrl: process.env.BASE_URL || 'http://localhost:3000'
}
}
然后,你可以在 axios
插件中使用 env
属性,如下所示:
// plugins/axios.js
import axios from 'axios'
export default axios.create({
baseURL: process.env.baseUrl
})
现在,baseURL
选项设置为 localhost:3000
,或者如果定义了 BASE_URL
环境变量,则设置为该环境变量的值。我们可以在 package.json
中设置 BASE_URL
,如下所示:
"scripts": {
"start": "cross-env BASE_URL=https://your-domain-name.com nuxt start"
}
你需要安装 cross-env
才能使前面的示例在 Windows
上工作:
$ npm i cross-env --save-dev
我们将在第六章 “编写插件和模块” 中介绍插件。在本书中创建跨域应用程序时,我们将经常使用此 env
选项。
你可以在我们的 |
router 选项
router
选项用于覆盖 Vue Router
的默认 Nuxt
配置。默认的 Vue Router
配置如下:
{
mode: 'history',
base: '/',
routes: [],
routeNameSplitter: '-',
middleware: [],
linkActiveClass: 'nuxt-link-active',
linkExactActiveClass: 'nuxt-link-exact-active',
linkPrefetchedClass: false,
extendRoutes: null,
scrollBehavior: null,
parseQuery: false,
stringifyQuery: false,
fallback: false,
prefetchLinks: true
}
你可以按如下方式更改此配置:
// nuxt.config.js
export default {
router: {
base: '/app/'
}
}
现在,你的应用程序运行在 localhost:3000/app/
。
有关此属性及其余配置的更多信息,请访问 https://nuxtjs.org/api/configuration-router。
你可以在我们的 GitHub
仓库的 /chapter-2/configuration/router/ 目录下找到此选项的示例应用程序。
dir 选项
dir
选项用于在我们的 Nuxt
应用程序中定义自定义目录。默认目录如下:
{
assets: 'assets',
layouts: 'layouts',
middleware: 'middleware',
pages: 'pages',
static: 'static',
store: 'store'
}
你可以按如下方式更改它们:
// nuxt.config.js
export default {
dir: {
assets: 'nuxt-assets',
layouts: 'nuxt-layouts',
middleware: 'nuxt-middleware',
pages: 'nuxt-pages',
static: 'nuxt-static',
store: 'nuxt-store'
}
}
现在,你可以使用上述自定义目录,如下所示:
-| app/
---| nuxt-assets/
---| components/
---| nuxt-layouts/
---| nuxt-middleware/
---| node_modules/
---| nuxt-pages/
---| plugins/
---| modules/
---| nuxt-static/
---| nuxt-store/
---| nuxt.config.js
---| package.json
---| README.md
你可以在我们的 |
loading 选项
loading
选项用于自定义你的 Nuxt
应用程序中的默认加载组件。如果你不想使用此默认加载组件,你可以将其设置为 false
,如下所示:
// nuxt.config.js
export default {
loading: false
}
我们将在第四章 “添加视图、路由和过渡效果” 中更详细地介绍此选项。
pageTransition 和 layoutTransition 选项
pageTransition
和 layoutTransition
选项用于自定义你的 Nuxt
应用程序中页面和布局过渡的默认属性。页面过渡的默认属性设置如下:
{
name: 'page',
mode: 'out-in',
appear: false,
appearClass: 'appear',
appearActiveClass: 'appear-active',
appearToClass: 'appear-to'
}
布局过渡的默认属性设置如下:
{
name: 'layout',
mode: 'out-in'
}
你可以按如下方式更改它们:
// nuxt.config.js
export default {
pageTransition: {
name: 'fade'
},
layoutTransition: {
name: 'fade-layout'
}
}
我们将在第四章 “添加视图、路由和过渡效果” 中更详细地介绍这些选项。
generate 选项
generate
选项用于告诉 Nuxt
如何为静态 Web
应用程序生成动态路由。动态路由是在 Nuxt
中使用下划线创建的路由。我们将在第四章 “添加视图、路由和过渡效果” 中介绍这种类型的路由。如果我们希望将我们的 Nuxt
应用程序导出为静态 Web
应用程序或 SPA
,而不是将 Nuxt
用作通用应用程序 (SSR
),我们会将 generate
选项与 Nuxt
爬虫无法自动检测到的动态路由一起使用。例如,如果爬虫无法检测到你的应用程序中可能存在以下动态路由(分页):
/posts/pages/1
/posts/pages/2
/posts/pages/3
然后,你可以使用此 generate
选项为你生成和转换每个路由的内容到 HTML
文件,如下所示:
// nuxt.config.js
export default {
generate: {
routes: [
'/posts/pages/1',
'/posts/pages/2',
'/posts/pages/3'
]
}
}
我们将在第十五章 “创建 Nuxt SPA” 和第十八章 “使用 CMS 和 GraphQL 创建 Nuxt 应用” 中向你展示如何使用此选项生成爬虫无法检测到的路由。
有关此 |
我们将在后续章节中逐步介绍和探索其他配置选项。但是,这些是你目前应该了解的基本自定义配置选项。现在,让我们在下一个主题中进一步探索 webpack
的静态资源服务。