主要是为了实现服务端的渲染(SSR)。
那么什么是SSR呢?为什么要使用SSR?
Vue.js 是构建客户端应用程序的框架。默认情况下,可以在浏览器中输出 Vue 组件,进行生成 DOM 和操作 DOM。然而,也可以将同一个组件渲染为服务器端的HTML字符串,将它们直接发送到浏览器,最后将这些静态标记"激活"为客户端上完全可交互的应用程序。服务器渲染的 Vue.js 应用程序也可以被认为是"同构"或"通用",因为应用程序的大部分代码都可以在服务器和客户端上运行。
与传统的SPA(单页面应用程序)相比,服务端渲染的优势主要有哪些?
使用服务器端渲染(SSR)时还需要有一些权衡之处:
$ npx create-nuxt-app <项目名>
或者用yarn :
$ yarn create nuxt-app <项目名>
$ npm run dev
安装过程十分的简单,这里附上官方的安装方式地址:https://zh.nuxtjs.org/guide/installation
提示:总的来说Nuxt.js官网中第一章介绍还是很重要的需要仔细阅读。
部分内容转载自:https://zhuanlan.zhihu.com/p/51000902
Nuxt.js 的应用目录架构提供了良好的代码分层结构,适用于开发或大或小的应用。 当然,你也可以根据自己的偏好组织应用代码。
当你使用npx命令安装完成之后将会有如下目录。
默认情况下 Nuxt 使用 vue-loader、file-loader 以及 url-loader 这几个 Webpack 加载器来处理文件的加载和引用。对于不需要通过 Webpack 处理的静态资源文件,可以放置在 static
目录中。
组件目录 components
用于组织应用的 Vue.js 组件。Nuxt.js 不会扩展增强该目录下 Vue.js 组件,即这些组件不会像页面组件那样有 asyncData
方法的特性。
布局目录 layouts
用于组织应用的布局组件。
该目录名为Nuxt.js保留的,不可更改。
你可以定制化 Nuxt.js 默认的应用模板。
定制化默认的 html 模板,只需要在应用根目录下创建一个 app.html
的文件。
默认模板为:
{{ HEAD }}
{{ APP }}
举个例子,你可以修改模板添加 IE 的条件表达式:
{{ HEAD }}
{{ APP }}
Nuxt.js 允许你扩展默认的布局,或在 layout
目录下创建自定义的布局。
可通过添加 layouts/default.vue
文件来扩展应用的默认布局。
提示: 别忘了在布局文件中添加
组件用于显示页面的主体内容。
默认布局的源码如下:
layouts
目录中的每个文件 (顶级) 都将创建一个可通过页面组件中的 layout
属性访问的自定义布局。
假设我们要创建一个 博客布局 并将其保存到layouts/blog.vue
:
我的博客导航栏在这里
然后我们必须告诉页面 (即pages/posts.vue
) 使用您的自定义布局:
页面组件实际上是 Vue 组件,只不过 Nuxt.js 为这些组件添加了一些特殊的配置项(对应 Nuxt.js 提供的功能特性)以便你能快速开发通用应用。
Hello {{ name }}!
Nuxt.js 为页面提供的特殊配置项:
属性名 | 描述 |
asyncData | 最重要的一个键, 支持 异步数据处理,另外该方法的第一个参数为当前页面组件的 上下文对象。 |
fetch | 与 asyncData 方法类似,用于在渲染页面之前获取数据填充应用的状态树(store)。不同的是 fetch 方法不会设置组件的数据。详情请参考 关于fetch方法的文档。 |
head | 配置当前页面的 Meta 标签, 详情参考 页面头部配置API。 |
layout | 指定当前页面使用的布局(layouts 根目录下的布局文件)。详情请参考 关于 布局 的文档。 |
loading | 如果设置为false ,则阻止页面自动调用this.$nuxt.$loading.finish() 和this.$nuxt.$loading.start() ,您可以手动控制它,请看例子,仅适用于在nuxt.config.js中设置loading 的情况下。请参考API配置 loading 文档。 |
transition | 指定页面切换的过渡动效, 详情请参考 页面过渡动效。 |
scrollToTop | 布尔值,默认: false 。 用于判定渲染页面前是否需要将当前页面滚动至顶部。这个配置用于 嵌套路由的应用场景。 |
validate | 校验方法用于校验 动态路由的参数。 |
middleware | 指定页面的中间件,中间件会在页面渲染之前被调用, 请参考 路由中间件。 |
Nuxt.js 使用了 vue-meta
更新应用的 头部标签(Head)
and html 属性
。
Nuxt.js 使用以下参数配置 vue-meta
:
{
keyName: 'head', // 设置 meta 信息的组件对象的字段,vue-meta 会根据这 key 值获取 meta 信息
attribute: 'n-head', // vue-meta 在监听标签时所添加的属性名
ssrAttribute: 'n-head-ssr', // 让 vue-meta 获知 meta 信息已完成服务端渲染的属性名
tagIDKeyName: 'hid' // 让 vue-meta 用来决定是否覆盖还是追加 tag 的属性名
}
Nuxt.js 允许你在 nuxt.config.js
里定义应用所需的所有默认 meta 标签,在 head
字段里配置就可以了:
注意: Nuxt.js 使用 hid
而不是默认值 vmid
识别元素key
一个使用自定义 viewport
和 谷歌字体
的配置示例:
head: {
meta: [
{ charset: 'utf-8' },
{ name: 'viewport', content: 'width=device-width, initial-scale=1' }
],
link: [
{ rel: 'stylesheet', href: 'https://fonts.googleapis.com/css?family=Roboto' }
]
}
想了解 head
变量的所有可选项的话,请查阅 vue-meta
使用文档。
关于 Nuxt.js 应用 HTML 头部配置的更多信息,请参考 HTML 头部配置 API。
关于个性化特定页面的 Meta 标签,请参考 页面头部配置API。
注意: 为了避免子组件中的meta标签不能正确覆盖父组件中相同的标签而产生重复的现象,建议利用 hid
键为meta标签配一个唯一的标识编号。请阅读关于 vue-meta
的更多信息。
middleware
目录用于存放应用的中间件。
中间件允许您定义一个自定义函数运行在一个页面或一组页面渲染之前。
每一个中间件应放置在 middleware/
目录。文件名的名称将成为中间件名称(middleware/auth.js
将成为 auth
中间件)。
一个中间件接收 context 作为第一个参数:
export default function (context) {
context.userAgent = process.server ? context.req.headers['user-agent'] : navigator.userAgent
}
中间件执行流程顺序:
nuxt.config.js
中间件可以异步执行,只需要返回一个 Promise
或使用第2个 callback
作为第一个参数:
middleware/stats.js
import axios from 'axios'
export default function ({ route }) {
return axios.post('http://my-stats-api.com', {
url: route.fullPath
})
}
然后在你的 nuxt.config.js
、 layouts 或者 pages 中使用中间件:
nuxt.config.js
module.exports = {
router: {
middleware: 'stats'
}
}
stats
中间件将在每个路由改变时被调用。
如果你想看到一个使用中间件的真实例子,请参阅在 GitHub 上的example-auth0。
页面目录 pages
用于组织应用的路由及视图。Nuxt.js 框架读取该目录下所有的 .vue
文件并自动生成对应的路由配置。
该目录名为Nuxt.js保留的,不可更改。
插件目录 plugins
用于组织那些需要在 根vue.js应用
实例化之前需要运行的 Javascript 插件。
静态文件目录 static
用于存放应用的静态文件,此类文件不会被 Nuxt.js 调用 Webpack 进行构建编译处理。 服务器启动的时候,该目录下的文件会映射至应用的根路径 /
下。
举个例子: /static/robots.txt
映射至 /robots.txt
该目录名为Nuxt.js保留,不可更改。
store
目录用于组织应用的 Vuex 状态树 文件。 Nuxt.js 框架集成了 Vuex 状态树 的相关功能配置,在 store
目录下创建一个 index.js
文件可激活这些配置。
该目录名为Nuxt.js保留,不可更改。
nuxt.config.js
文件用于组织Nuxt.js 应用的个性化配置,以便覆盖默认配置。
该文件名为Nuxt.js保留的,不可更改。
package.json
文件用于描述应用的依赖关系和对外暴露的脚本接口。
该文件名为Nuxt.js保留的,不可更改。
别名 | 目录 |
---|---|
~ 或 @ |
src目录 |
~~ 或 @@ |
根目录 |
默认情况下,src目录
和根目录
相同
提示: 在您的 vue
模板中, 如果你需要引入 assets
或者 static
目录, 使用 ~/assets/your_image.png
和 ~/static/your_image.png
方式。
未完待续~