安装 Nuxt

🏷️ 365bet怎么提现 📅 2026-02-14 08:54:30 👤 admin 👁️ 1013 ❤️ 223
安装 Nuxt

NuxtJS Web 开发实用指南(全)

原文:zh.annas-archive.org/md5/95454EEF6B1A13DFE0FAD028BE716A19

译者:飞龙

协议:CC BY-NC-SA 4.0

前言

Nuxt.js(本书中将其称为 Nuxt)是建立在 Vue.js 之上的渐进式 Web 框架(本书中将其称为 Vue)用于服务器端渲染(SSR)。使用 Nuxt 和 Vue,构建通用和静态生成的应用程序比以往任何时候都更容易。本书将帮助您快速了解 Nuxt 的基础知识以及如何将其与最新版本的 Vue 集成,使您能够使用 Nuxt 和 Vue.js 构建整个项目,包括身份验证、测试和部署。您将探索 Nuxt 的目录结构,并通过使用 Nuxt 的页面、视图、路由和 Vue 组件以及编写插件、模块、Vuex 存储和中间件来创建您的 Nuxt 项目。此外,您还将学习如何使用 Koa.js(本书中将其称为 Koa)、PHP 标准建议(PSRs)、MongoDB 和 MySQL 从头开始创建 Node.js 和 PHP API 或数据平台,以及使用 WordPress 作为无头 CMS 和 REST API。您还将使用 Keystone.js 作为 GraphQL API 来补充 Nuxt。您将学习如何使用 Socket.IO 和 RethinkDB 创建实时 Nuxt 应用程序和 API,最后使用 Nuxt 从远程 API 生成静态站点并流式传输资源(图像和视频),无论是 REST API 还是 GraphQL API。

本书适合对象

这本书适用于任何想要构建服务器端渲染的 Vue.js 应用程序的 JavaScript 或全栈开发人员。对 Vue.js 框架的基本理解将有助于理解本书涵盖的关键概念。

本书内容

第一章《介绍 Nuxt》是您将了解 Nuxt 的主要特点的地方。您将了解今天有哪些类型的 Web 应用程序,以及 Nuxt 属于哪些类别。然后,您将在接下来的章节中了解您可以使用 Nuxt 做什么。

第二章《开始使用 Nuxt》是您将安装 Nuxt 的地方,使用脚手架工具,或者从头开始创建您的第一个基本 Nuxt 应用程序。您将了解 Nuxt 项目中的默认目录结构,配置 Nuxt 以适应您的项目,并理解资源服务。

第三章《添加 UI 框架》是您将添加自定义 UI 框架,例如 Zurb Foundation,Motion UI,Less CSS 等等,以使您在 Nuxt 中的 UI 开发更加轻松和有趣。

第四章,“添加视图、路由和过渡”,是您将在 Nuxt 应用程序中创建导航路由、自定义页面、布局和模板的地方。您将学习如何添加过渡和动画,创建自定义错误页面,自定义全局 meta 标签,并为单个页面添加特定标签。

第五章,“添加 Vue 组件”,是您将在 Nuxt 应用程序中添加 Vue 组件的地方。您将学习如何创建全局和局部组件并重用它们,编写基本和全局 mixin,并定义符合命名约定的组件名称。

第六章,“编写插件和模块”,是您将在 Nuxt 应用程序中创建和添加插件、模块和模块片段的地方。您将学习如何创建 Vue 插件并将其安装在您的 Nuxt 项目中,编写全局函数并注册它们。

第七章,“添加 Vue 表单”,是您将使用v-model和v-bind创建表单的地方,验证表单元素并通过使用修饰符进行动态值绑定。您还将学习如何使用 Vue 插件 VeeValidate,使前端验证变得更加简单。

第八章,“添加服务器端框架”,是您将使用 Koa 作为服务器端框架创建 API 来补充您的 Nuxt 应用程序的地方。您将学习如何安装 Koa 及其必要的 Node.js 包以创建一个完全可用的 API,并将其与您的 Nuxt 应用程序集成。此外,您还将学习如何在 Nuxt 中使用异步数据从 Koa API 获取数据,通过异步数据访问 Nuxt 上下文,监听查询变化,处理错误,并使用 Axios 作为请求 API 数据的 HTTP 客户端。

第九章,“添加服务器端数据库”,是您将使用 MongoDB 管理 Nuxt 应用程序的数据库的地方。您将学习如何安装 MongoDB,编写基本的 MongoDB 查询,向 MongoDB 数据库添加一些虚拟数据,将 MongoDB 与上一章的 Koa API 集成,然后从 Nuxt 应用程序中获取数据。

第十章,添加 Vuex 存储,是您将使用 Vuex 管理和集中存储 Nuxt 应用程序数据的地方。您将了解 Vuex 架构,使用存储的变异和操作方法来改变存储数据,当存储变得更大时如何以模块化的方式构建您的存储程序,以及如何在 Vuex 存储中处理表单。

第十一章,编写路由中间件和服务器中间件,是您将在 Nuxt 应用程序中创建路由中间件和服务器中间件的地方。您将学习如何使用 Vue Router 创建中间件,使用 Vue CLI 创建 Vue 应用程序,并使用 Express.js(本书中称为 Express)、Koa 和 Connect.js(本书中称为 Connect)作为服务器中间件。

第十二章,创建用户登录和 API 身份验证,是您将在 Nuxt 应用程序中为受限页面添加身份验证的地方,使用会话、cookies、JSON Web Tokens(JWTs)、Google OAuth 以及您在上一章中学到的路由中间件。您将学习如何使用 JWT 在后端进行身份验证,在 Nuxt 应用程序中在客户端和服务器端使用 cookies(前端身份验证),以及在后端和前端身份验证中添加 Google OAuth。

第十三章,编写端到端测试,是您将使用 AVA、jsdom 和 Nightwatch.js 创建端到端测试的地方。您将学习如何安装这些工具,设置测试环境,并为上一章中 Nuxt 应用程序的页面编写测试。

第十四章,使用 Linter、格式化程序和部署命令,是您将使用 ESLint、Prettier 和 StandardJS 来保持代码清洁、可读和格式化的地方。您将学习如何安装和配置这些工具以满足您的需求,并在 Nuxt 应用程序中集成不同的 linter。最后,您将学习如何使用 Nuxt 命令部署您的 Nuxt 应用程序,并了解发布应用程序的托管服务。

第十五章,使用 Nuxt 创建 SPA,您将学习如何在 Nuxt 中开发单页应用程序(SPA),了解 Nuxt 中 SPA 与经典 SPA 的区别,并生成静态 SPA 以部署到静态托管服务器 GitHub Pages。

第十六章,为 Nuxt 创建一个与框架无关的 PHP API,您将使用 PHP 创建 API 来补充您的 Nuxt 应用程序。您将学习如何安装 Apache 服务器和 PHP 引擎,了解 HTTP 消息和 PHP 标准,将 MySQL 安装为您的数据库系统,为 MySQL 编写 CRUD 操作,通过遵守 PHP 标准创建与框架无关的 PHP API,然后将您的 API 与 Nuxt 应用程序集成。

第十七章,使用 Nuxt 创建实时应用程序,您将使用 RethinkDB、Socket.IO 和 Koa 开发实时 Nuxt 应用程序。您将学习如何安装 RethinkDB,介绍 ReQL,将 RethinkDB 集成到您的 Koa API 中,将 Socket.IO 添加到 API 和 Nuxt 应用程序中,最终将您的 Nuxt 应用程序转换为具有 RethinkDB changefeeds 的实时 Web 应用程序。

第十八章,使用 CMS 和 GraphQL 创建 Nuxt 应用程序,您将使用(无头)CMS 和 GraphQL 来补充您的 Nuxt 应用程序。您将学习如何将 WordPress 转换为无头 CMS,在 WordPress 中创建自定义文章类型并扩展 WordPress REST API。您将学习如何在 Nuxt 应用程序中使用 GraphQL,了解 GraphQL 模式和解析器,使用 Appolo Server 创建 GraphQL API,并使用 Keystone.js GraphQL API。此外,您还将学习如何安装和保护 PostgreSQL 和 MongoDB,使用 Nuxt 生成静态站点,并从远程 API 流式传输资源(图像和视频),无论是 REST API 还是 GraphQL API。

本书最大的收获

在整本书中,您将需要一个 Nuxt.js 的版本-最新版本,如果可能的话。所有代码示例都是在 Ubuntu 20.10 上使用 Nuxt 2.14.x 进行测试的。以下是本书的其他必要软件、框架和技术列表:

书中涵盖的软件/硬件

操作系统要求

Koa.js v2.13.0

任何平台

Axios v0.19.2

任何平台

Keystone.js v11.2.0

任何平台

Socket.IO v2.3.0

任何平台

MongoDB v4.2.6

任何平台

MySQL v10.3.22-MariaDB

任何平台

RethinkDB v2.4.0

Linux, macOS

PHP v7.4.5

任何平台

Foundation v6.6.3

任何平台

Swiper.js v6.0.0

任何平台

Node.js v12.18.2 LTS (至少 v8.9.0)

任何平台

NPM v6.14.7

任何平台

如果您使用本书的数字版本,我们建议您自己输入代码或通过 GitHub 存储库访问代码(链接在下一节中提供)。这样做将有助于避免与复制和粘贴代码相关的潜在错误。

下载示例代码文件

您可以从您在www.packt.com的账户中下载本书的示例代码文件。如果您在其他地方购买了本书,您可以访问www.packtpub.com/support并注册,文件将直接发送到您的邮箱。

您可以按照以下步骤下载代码文件:

登录或注册网址为www.packt.com。

选择“支持”选项卡。

点击“代码下载”。

在搜索框中输入书名,并按照屏幕上的说明进行操作。

下载文件后,请确保使用最新版本的解压缩软件解压缩文件夹:

Windows 的 WinRAR/7-Zip

Mac 的 Zipeg/iZip/UnRarX

Linux 的 7-Zip/PeaZip

该书的代码包也托管在 GitHub 上,网址为github.com/PacktPublishing/Hands-on-Nuxt.js-Web-Development。如果代码有更新,将在现有的 GitHub 存储库中进行更新。

我们还有来自丰富书籍和视频目录的其他代码包,可在github.com/PacktPublishing/上找到。快去看看吧!

使用的约定

本书中使用了许多文本约定。

CodeInText:指示文本中的代码词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄。例如:"然后,您可以在 .css 文件中创建过渡样式。"

代码块设置如下:

// pages/about.vue

在这里,您可以看到我们有一个 HTML 模板,它从 JavaScript 脚本中打印消息,并且描述模板的 CSS 样式,全部在一个.vue文件中。这使得您的代码更加结构化、可读和可组织。很棒,不是吗?这只能通过vue-loader和 webpack 实现。在 Nuxt 中,我们只在.vue文件中编写组件,无论它们是/components/、/pages/还是/layouts/目录中的组件。我们将在第二章中更详细地探讨这一点,开始使用 Nuxt。现在,我们将看一下 Nuxt 功能,它允许您直接编写 ES6 JavaScript。

编写 ES2015+

Nuxt 在不需要您担心配置和安装 Babel 在 webpack 的情况下,即可编译您的 ES6+代码。这意味着您可以立即编写 ES6+代码,并且您的代码将被编译为可以在旧版浏览器上运行的 JavaScript。例如,当使用asyncData方法时,您经常会看到以下解构赋值语法:

// pages/about.vue

在前面的代码中,使用解构赋值语法将 Nuxt 上下文中的属性解包到不同的变量中,以便我们可以在asyncData方法中使用这些变量进行逻辑处理。

有关 Nuxt 上下文和 ECMAScript 2015 功能的更多信息,请分别访问nuxtjs.org/api/context和babeljs.io/docs/en/learn/。

在 Nuxt 中编写 ES6 只能通过babel-loader和 webpack 实现。在 Nuxt 中,您可以编写更多内容,包括async函数、await运算符、箭头函数、import语句等。那么 CSS 预处理器呢?如果您使用 Sass、Less 或 Stylus 等流行的 CSS 预处理器编写 CSS 样式,但如果您是 Sass 用户而不是 Less 用户或 Stylus 用户,Nuxt 是否支持它们中的任何一个?简短的答案是是。我们将在下一节中找出这个问题的长答案。

使用预处理器编写 CSS

在 Nuxt 中,您可以选择喜欢的 CSS 预处理器来编写应用程序的样式,无论是 Sass、Less 还是 Stylus。它们已经在 Nuxt 中为您预配置。您可以在github.com/nuxt/nuxt.js/blob/dev/packages/webpack/src/config/base.js查看它们的配置。因此,您只需要在 Nuxt 项目中安装预处理器及其 webpack 加载程序。例如,如果您想将 Less 作为 CSS 预处理器,只需在 Nuxt 项目中安装以下依赖项:

$ npm i less --save-dev

$ npm i less-loader --save-dev

然后,您可以通过在

从这个例子中,您可以看到在 Nuxt 中编写现代 CSS 样式就像在 Nuxt 中编写现代 JavaScript 一样容易。您只需要安装您喜欢的 CSS 预处理器及其 webpack 加载程序。在本书的后续章节中,我们将使用 Less,但现在让我们找出 Nuxt 提供了哪些其他功能。

有关这些预处理器及其 webpack 加载程序的更多信息,请访问以下链接:

lesscss.org/ 用于 Less

webpack.js.org/loaders/less-loader/ 用于 less-loader

sass-lang.com/ 用于 Sass

webpack.js.org/loaders/sass-loader/ 用于 sass-loader

stylus-lang.com/ 用于 Stylus

github.com/shama/stylus-loader 用于 stylus-loader

尽管 PostCSS 不是预处理器,但如果您想在 Nuxt 项目中使用它,请访问提供的指南nuxtjs.org/faq/postcss-plugins。

使用模块和插件扩展 Nuxt

Nuxt 是建立在模块化架构之上的。这意味着您可以使用无数的模块和插件来扩展它,适用于您的应用程序或 Nuxt 社区。这也意味着您可以从 Nuxt 和 Vue 社区中选择大量的模块和插件,这样您就不必为您的应用程序重新发明它们。这些链接如下:

Nuxt.js 的精彩模块github.com/nuxt-community/awesome-nuxt#official

在github.com/vuejs/awesome-vue#components--libraries上查看令人敬畏的 Vue.js,用于 Vue 组件、库和插件

模块和插件只是 JavaScript 函数。现在不用担心它们之间的区别;我们将在第六章中讨论这个问题,编写插件和模块。

在路由之间添加过渡

与传统的 Vue 应用程序不同,在 Nuxt 中,您不必使用包装器元素来处理元素或组件上的 JavaScript 动画、CSS 动画和 CSS 过渡。例如,如果您想在导航到特定页面时应用fade过渡,您只需将过渡名称(例如fade)添加到该页面的transition属性中:

// pages/about.vue

然后,你可以在.css文件中创建过渡样式:

// assets/transitions.css

.fade-enter,

.fade-leave-to {

opacity: 0;

}

.fade-leave,

.fade-enter-to {

opacity: 1;

}

.fade-enter-active,

.fade-leave-active {

transition: opacity 3s;

}

当导航到/about路由时,“fade”过渡将自动应用于about页面。很酷,不是吗?如果此时代码或类名看起来有点令人不知所措,不要担心;我们将在第四章中更详细地了解和探索这个过渡特性。

管理元素

此外,与传统的 Vue 应用程序不同,您可以直接管理应用程序的块,而无需安装额外处理它的 Vue 包vue-meta。您只需通过head属性向任何页面添加所需的、<meta>和<link>数据。例如,您可以通过应用程序的 Nuxt 配置文件管理全局<head>元素:</p> <p>// nuxt.config.js</p> <p>export default {</p> <p>head: {</p> <p>title: 'My Nuxt App',</p> <p>meta: [</p> <p>{ charset: 'utf-8' },</p> <p>{ name: 'viewport', content: 'width=device-width, initial-scale=1' },</p> <p>{ hid: 'description', name: 'description', content: 'My Nuxt app is</p> <p>about...' }</p> <p>],</p> <p>link: [</p> <p>{ rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' }</p> <p>]</p> <p>}</p> <p>}</p> <p>Nuxt 将为您将此数据转换为 HTML 标记。同样,我们将在第四章中更详细地了解和探索此功能,添加视图、路由和过渡。</p> <p>使用 webpack 捆绑和拆分代码</p> <p>Nuxt 使用 webpack 将您的代码捆绑、缩小并拆分为可以加快应用程序加载时间的块。例如,在一个简单的 Nuxt 应用程序中有两个页面,index/home 和 about,您将为客户端获得类似的块:</p> <p>Hash: 0e9b10c17829e996ef30</p> <p>Version: webpack 4.43.0</p> <p>Time: 4913ms</p> <p>Built at: 06/07/2020 21:02:26</p> <p>Asset Size Chunks Chunk Names</p> <p>../server/client.manifest.json 7.77 KiB [emitted]</p> <p>LICENSES 389 bytes [emitted]</p> <p>app.3d81a84.js 51.2 KiB 0 [emitted] [immutable] app</p> <p>commons/app.9498a8c.js 155 KiB 1 [emitted] [immutable] commons/app</p> <p>commons/pages/index.8dfce35.js 13.3 KiB 2 [emitted] [immutable] commons/pages/index</p> <p>pages/about.c6ca234.js 357 bytes 3 [emitted] [immutable] pages/about</p> <p>pages/index.f83939d.js 1.21 KiB 4 [emitted] [immutable] pages/index</p> <p>runtime.3d677ca.js 2.38 KiB 5 [emitted] [immutable] runtime</p> <p>+ 2 hidden assets</p> <p>Entrypoint app = runtime.3d677ca.js commons/app.9498a8c.js app.3d81a84.js</p> <p>您将为服务器端获取的块如下所示:</p> <p>Hash: 8af8db87175486cd8e06</p> <p>Version: webpack 4.43.0</p> <p>Time: 525ms</p> <p>Built at: 06/07/2020 21:02:27</p> <p>Asset Size Chunks Chunk Names</p> <p>pages/about.js 1.23 KiB 1 [emitted] pages/about</p> <p>pages/index.js 6.06 KiB 2 [emitted] pages/index</p> <p>server.js 80.9 KiB 0 [emitted] app</p> <p>server.manifest.json 291 bytes [emitted]</p> <p>+ 3 hidden assets</p> <p>Entrypoint app = server.js server.js.map</p> <p>这些块和构建信息是在使用 Nuxt npm run build 命令构建应用以进行部署时生成的。我们将在第十四章中更详细地了解这一点,使用 Linters、Formatters 和部署命令。</p> <p>除此之外,Nuxt 还使用了 webpack 的其他出色功能和插件,比如静态文件和资源服务(资源管理),热模块替换,CSS 提取(extract-css-chunks-webpack-plugin),构建和监视时的进度条(webpackbar)等等。更多信息,请访问以下链接:</p> <p>webpack.js.org/guides/code-splitting/ 用于代码拆分</p> <p>webpack.js.org/concepts/manifest/ 用于清单</p> <p>webpack.js.org/guides/asset-management/ 用于资源管理</p> <p>webpack.js.org/concepts/hot-module-replacement/ 用于热模块替换</p> <p>webpack.js.org/plugins/mini-css-extract-plugin/ 用于 CSS 提取</p> <p>github.com/nuxt/webpackbar 用于 webpackbar(Nuxt 核心团队开发的插件)</p> <p>来自 webpack、Babel 和 Nuxt 本身的这些出色功能将使您的现代项目开发变得有趣且轻松。现在,让我们看看各种应用类型,看看在构建下一个 web 应用时,为什么应该或不应该使用 Nuxt。</p> <p>应用类型</p> <p>今天的 web 应用与几十年前的应用非常不同。在那些日子里,我们的选择和解决方案更少。今天,它们正在蓬勃发展。无论我们称它们为“应用”还是“应用程序”,它们都是一样的。在本书中,我们将称它们为“应用”。因此,我们可以将我们当前的 web 应用分类如下:</p> <p>传统的服务器端渲染应用</p> <p>传统的单页应用</p> <p>通用 SSR 应用</p> <p>静态生成的应用</p> <p>让我们逐个了解它们,并了解其利弊。我们首先来看最古老的应用类型 - 传统的服务器端渲染应用。</p> <p>传统的服务器端渲染应用</p> <p>服务器端呈现是向浏览器客户端传递数据和 HTML 的最常见方法。在网络行业刚刚开始时,这是唯一的做事方式。在传统的服务器呈现的应用程序或动态网站中,每个请求都需要从服务器重新呈现新页面到浏览器。这意味着您将在每次发送请求到服务器时重新加载所有脚本、样式和模板。重新加载和重新呈现的想法一点也不吸引人。尽管如今可以通过使用 AJAX 来减轻一些重新加载和重新呈现的负担,但这会给应用程序增加更多复杂性。</p> <p>让我们来看看这些类型应用程序的优缺点。</p> <p>优势:</p> <p>更好的 SEO 性能:因为客户端(浏览器)得到了包含所有数据和 HTML 标记的完成页面,特别是属于页面的元标记,搜索引擎可以爬取页面并对其进行索引。</p> <p>更快的初始加载时间:因为页面和内容是由服务器端脚本语言(如 PHP)在发送到客户端浏览器之前在服务器端呈现的,所以我们在客户端很快就能得到呈现的页面。此外,无需像传统的单页应用程序那样在 JavaScript 文件中编译网页和内容,因此应用程序在浏览器上加载更快。</p> <p>缺点:</p> <p>用户体验较差:因为每个页面都必须重新呈现,这个过程在服务器上需要时间,用户必须等待直到在浏览器上重新加载所有内容,这可能会影响用户体验。大多数情况下,我们只希望在提供新请求时获得新数据;我们不需要重新生成 HTML 基础,例如导航栏和页脚,但仍然会重新呈现这些基本元素。我们可以利用 AJAX 来仅呈现特定组件,但这会使开发变得更加困难和复杂。</p> <p>后端和前端逻辑的紧密耦合:视图和数据通常在同一个应用程序中处理。例如,在典型的 PHP 框架应用程序中,如 Laravel,您可以在路由中使用模板引擎(如 Laravel Pug)渲染视图。或者,如果您正在为传统的服务器端渲染应用程序使用 Express,您可以使用模板引擎(如 Pug 或 vuexpress)来渲染视图。在这两个框架中,视图与后端逻辑耦合在一起,即使我们可以使用模板引擎提取视图层。后端开发人员必须知道每个特定路由或控制器要使用的视图(例如home.pug)。另一方面,前端开发人员必须在与后端开发人员相同的框架中处理视图。这给项目增加了更多复杂性。</p> <p>传统的单页面应用程序(SPA)</p> <p>与服务器端渲染应用程序相反,SPA 是客户端渲染(CSR)应用程序,它使用 JavaScript 在浏览器中渲染内容,而不需要在使用过程中重新加载新页面。因此,您不会将内容呈现到 HTML 文档中,而是从服务器获取基本的 HTML,然后在浏览器中使用 JavaScript 加载内容。</p> <p><!DOCTYPE html></p> <p><html></p> <p><head></p> <p><meta charset="utf-8"></p> <p><title>Vue App

这是一个非常简单的 Vue 应用程序,其中您有一个容器

,只有app作为其 ID,里面没有其他内容,然后是两个

就是这样。您已经成功在您的 Nuxt 项目中安装并成功集成了它。现在,让我们在下一节中探讨如何使用 Foundation 创建网格结构布局和网站导航,以加速前端网页开发。

使用 Foundation 创建网格布局和网站导航

我们应该首先看一下 Foundation 的网格系统,它被称为 XY Grid。在网页开发中,网格系统是一种将我们的 HTML 元素结构化为基于网格的布局的系统。Foundation 带有我们可以轻松使用的 CSS 类来结构化我们的 HTML 元素,例如:

left

right

这将在大屏幕上(例如 iPad,Windows Surface)将我们的元素响应地结构化为两列,但在小屏幕上(例如 iPhone)将其结构化为单列。让我们在默认的index.vue页面和由create-nuxt-app脚手架工具生成的default.vue布局中创建一个响应式布局和网站导航:

删除/components/目录中的Logo.vue组件。

删除/pages/目录中index.vue页面中的

如果您想要将本地样式应用于特定页面或布局,这种方式是很好和可管理的。您应该在lang属性之前添加一个scoped属性,以便本地样式仅在特定页面上本地应用,并且不会干扰其他页面的样式。但是,如果您有多个页面和布局共享一个公共样式,那么您应该在项目的/assets/目录中全局创建样式。因此,让我们看看您如何在以下步骤中使用 Less 创建全局样式:

通过终端在 npm 上安装 Less 及其 webpack 加载器:

$ npm i less --save-dev

$ npm i less-loader --save-dev

在/assets/目录中创建一个main.less文件,并添加以下样式:

// assets/less/main.less @borderWidth: 1px;

@borderStyle: solid;

.cell {

border: @borderWidth @borderStyle blue;

}

.row {

border: @borderWidth @borderStyle red;

}

在 Nuxt 配置文件中安装上述全局样式如下:

// nuxt.config.js

export default {

css: [

'assets/less/main.less'

]

}

例如,在项目的任何地方应用上述样式:

// pages/index.vue

当你在浏览器上启动应用程序时,你应该看到刚刚添加到 CSS 类的边框。这些边框在开发布局时可以作为指南,因为网格系统下面的网格线是“不可见的”,没有可见的线可能很难将它们可视化。

你可以在我们的 GitHub 存储库的/chapter-3/nuxt-universal/adding-less/中找到上述代码。

由于我们在本节中涵盖了 CSS 预处理器,值得一提的是我们可以在

有关 Sass 和 Scss 的更多信息,请访问sass-lang.com/。

在本书中,我们在各章节中主要使用 Less、原生 HTML 和 JavaScript(主要是 ECMAScript 6 或 ECMAScript 2015)。但你可以自由选择任何我们提到的预处理器。现在让我们来看看在 Nuxt 项目中为 HTML 元素添加效果和动画的另一种方法——jQuery UI。

添加 jQuery UI

jQuery UI 是建立在 jQuery 之上的一组用户界面(UI)交互、效果、小部件和实用工具。它对设计师和开发人员都是一个有用的工具。与 Motion UI 和 Foundation 一样,jQuery UI 可以帮助你用更少的代码在项目中做更多事情。它可以通过使用 CDN 资源和以 jQuery 为依赖项轻松地添加到普通 HTML 页面中,例如:

...

再次强调,与 Foundation 一样。当你想要将 jQuery UI 与 Nuxt 集成时会有一些复杂。我们可以使用上述 CDN 资源,并将它们添加到 Nuxt 配置文件中的head选项中,如下所示:

// nuxt.config.js

export default {

head: {

script: [

{ src: 'https://cdnjs.cloudflare.com/.../jquery.min.js' },

{ src: 'https://code.jquery.com/.../jquery-ui.js' },

],

link: [

{ rel: 'stylesheet', href:

'https://code.jquery.com/.../jquery-ui.css' },

]

}

}

但是,就像与 Foundation 集成一样,不鼓励这样做。以下是正确的做法:

在终端上通过 npm 安装 jQuery UI:

$ npm i jquery-ui-bundle

将 jQuery UI 的 CSS 源文件从/node_modules/文件夹添加到 Nuxt 配置文件的css选项中:

// nuxt.config.js

module.exports = {

css: [

'jquery-ui-bundle/jquery-ui.min.css'

]

}

在/plugins/目录中创建一个名为jquery-ui-bundle.js的文件,并按以下方式导入 jQuery UI:

// plugins/client-only/jquery-ui-bundle.client.js

import 'jquery-ui-bundle'

再次强调,此插件将确保 jQuery UI 仅在客户端上运行,并且我们将在第六章中更详细地介绍插件和模块的内容。

在 Nuxt 配置文件的plugins选项中注册前面的 jQuery UI 插件,如下所示:

// nuxt.config.js

export default {

plugins: [

'~/plugins/client-only/jquery-ui-bundle.client.js',

],

}

现在您可以在任何地方使用 jQuery UI,例如:

// pages/index.vue

在此示例中,我们使用了 jQuery UI 的一个小部件 Accordion 来显示可折叠的内容面板。您可以在jqueryui.com/accordion/找到 HTML 代码的详细信息。

除了小部件,jQuery UI 还带有动画缓动效果等效果。让我们看看如何在以下步骤中使用缓动效果创建动画:

在/pages/目录中创建一个名为animate.vue的新页面,并在