Vue.js 框架源码与进阶 - NuxtJS 基础

10.1 NuxtJS 介绍

NuxtJS 是什么

Nuxt.js 是一个基于 Vue.js 的第三方开源服务端渲染应用框架,它可以帮我们轻松的实现同构应用。

通过对客户端/服务端基础架构的抽象组织,Nuxt.js 主要关注的是应用的 UI渲染

我们的目标是创建一个灵活的应用框架,你可以基于它初始化新项目的基础结构代码,或者在已有 Node.js 项目中使用 Nuxt.js。

Nuxt.js 预设了利用 Vue.js 开发服务端渲染的应用所需要的各种配置。

除此之外,我们还提供了一种命令叫:nuxt generate ,为基于 Vue.js 的应用提供生成对应的静态站点的功能。

我们相信这个命令所提供的功能,是向开发集成各种微服务(Microservices)的 Web 应用迈开的一步。

作为框架,Nuxt.js 为 客户端/服务端 这种典型的应用架构模式提供了许多有用的特性,例如异步数据加载、中间件支持、布局支持等非常实用的功能。

NuxtJS 框架是如何运作的

在这里插入图片描述
Nuxt.js 集成了以下组件/框架,用于开发完整而强大的 Web 应用:

  • Vue.js
  • Vue Router
  • Vuex
  • Vue Server Renderer

压缩并 gzip 后,总代码大小为:57kb (如果使用了 Vuex 特性的话为 60kb)。

另外,Nuxt.js 使用 Webpackvue-loaderbabel-loader 来处理代码的自动化构建工作(如打包、代码分层、压缩等等)。

NuxtJS 特性

  • 基于 Vue.js
    • Vue、Vue Router、Vuex、Vue SSR
  • 自动代码分层
  • 服务端渲染
  • 强大的路由功能,支持异步数据
  • 静态文件服务
  • ES2015+ 语法支持
  • 打包和压缩 JS 和 CSS
  • HTML 头部标签管理
  • 本地开发支持热加载
  • 集成 ESLint
  • 支持各种样式预处理器: SASS、LESS、 Stylus 等等
  • 支持 HTTP/2 推送

NuxtJS 渲染流程

下图阐述了 Nuxt.js 应用一个完整的服务器请求到渲染(或用户通过 切换路由渲染页面)的流程:
在这里插入图片描述

NuxtJS 使用方式

  • 初始项目
  • 已有的 Node.js 服务端项目
    • 直接把 Nuxt 当作一个中间件集成到 Node Web Server 中
  • 现有的 Vue.js 项目
    • 非常熟悉 Nuxt.js
    • 至少百分之 10 的代码改动

10.2 初始化 NuxtJS

Nuxt 提供了两种方式用来创建项目:

  • 官方文档
    • 使用 create-nuxt-app 脚手架工具
    • 手动创建

为了让大家有一个更好的学习效果,这里我们通过手动创建的方式来学习 Nuxt。

(1) 准备

# 创建示例项目
mkdir nuxt-app-demo

# 进入示例项目目录中
cd nuxt-app-demo

# 初始化 package.json 文件
npm init -y

# 安装 nuxt
npm install nuxt

package.json 文件的 scripts 中新增:

"scripts": {
   
  "dev": "nuxt"
}

上面的配置使得我们可以通过运行 npm run dev 来运行 nuxt

(2) 创建页面并启动项目

创建 pages 目录:

mkdir pages

创建我们的第一个页面的 pages/index.vue

<template>
  <h1>Hello world!</h1>
</template>

然后启动项目:

npm run dev

现在我们的应用运行在 http://localhost:3000 上运行。

在这里插入图片描述

注意:Nuxt.js 会监听 pages 目录中的文件更改,因此在添加新页面时无需重新启动应用程序。

(3) Nuxt 中的基础路由

Nuxt.js 会根据 pages 目录中的所有 *.vue 文件生成应用的路由配置。

10.3 NuxtJS 路由

Nuxt.js 依据 pages 目录结构自动生成 vue-router 模块的路由配置。

基础路由

假设 pages 的目录结构如下:

pages/
--| user/
-----| index.vue
-----| one.vue
--| index.vue

那么,Nuxt.js 自动生成的路由配置如下:

router: {
   
  routes: [
    {
   
      name: 'index',
      path: '/',
  	  component: 'pages/index.vue'
  	},
  	{
   
  	  name: 'user',
  	  path: '/user',
  	  component: 'pages/user/index.vue'
  	},
  	{
   
  	  name: 'user-one',
  	  path: '/user/one',
  	  component: 'pages/user/one.vue'
  	}
  ]
}

路由导航

<template>
  <div>
    <h1>About page</h1>
    <!-- a 链接,刷新导航,走服务端渲染 -->
    <h2>a 链接</h2>
    <a href="/">首页</a>

    <!-- router-link 导航链接组件 -->
    <h2>router-link</h2>
    <router-link to="/">首页</router-link>

    <!-- 编程式导航 -->
    <h2>编程式导航</h2>
    <button @click="onClick">首页</button>
  </div>
</template>

<script>
export default {
   
  name: 'AboutPage',
  methods: {
   
    onClick () {
   
      this.$router.push('/')
    }
  }
}
</script>

动态路由

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值