渲染就是把数据放到页面上,预渲染就是在页面加载完成之前把数据放到页面
流程:
使用插件:prerender-spa-plugin
npm install prerender-spa-plugin -S
修改title描述关键词:vue-meta-info
npm install vue-meta-info -S
metaInfo:{
title:'',
meta:[{
name:'',
content:''
}]
}
优点:
缺点:
应用场景:
关于 Nuxt.js - NuxtJS | Nuxt.js 中文网
服务端渲染 (SSR) | Vue.js (vuejs.org)
命令 - NuxtJS | Nuxt.js 中文网
流程:
前后端不分离
前后端分离
页面加载压力在前端(客户端),可以构建现代化的SPA单页面,提供流畅的用户体验
SPA单页面应用
选择哪种方案主要取决于具体项目的需求和优先级。对于需要SEO的页面,预渲染或服务端渲染是比较常用的解决方案。而对于不需要SEO或SEO要求较低的页面,可以完全依赖前端的单页面应用架构。
前置知识(安装node和vue脚手架):Vue-CLI安装方法_全局安装vue-cli_Legreay的博客-CSDN博客
报错处理: ‘create-nuxt-app‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。海盗船长说他要扬帆起航的博客-CSDN博客
安装:
npx create-nuxt-app <项目名>
,勾选配置随后生成项目cd
,进入项目文件夹
npm run dev
,启动项目,应用运行在 http://localhost:3000 上运行
Nuxt.js 会监听 pages
目录中的文件更改,因此在添加新页面时无需重新启动应用程序。
目录:
assets
用于组织未编译的静态资源如 LESS
、SASS
或 JavaScript
。对于不需要通过 Webpack 处理的静态资源文件,可以放置在static
目录中。components
用于组织应用的 Vue.js 组件。layouts
用于组织应用的布局组件。middleware
目录用于存放应用的中间件。pages
用于组织应用的路由及视图。Nuxt.js 框架读取该目录下所有的 .vue
文件并自动生成对应的路由配置。plugins
用于组织那些需要在 根vue.js应用
实例化之前需要运行的 Javascript 插件。static
用于存放应用的静态文件,此类文件不会被 Nuxt.js 调用 Webpack 进行构建编译处理。服务器启动的时候,该目录下的文件会映射至应用的根路径 /
下。store
目录用于组织应用的 Vuex 状态树 文件。 Nuxt.js 框架集成了 Vuex 状态树 的相关功能配置,在 store
目录下创建一个 index.js
文件可激活这些配置。nuxt.config.js
文件用于组织 Nuxt.js 应用的个性化配置,以便覆盖默认配置。package.json
文件用于描述应用的依赖关系和对外暴露的脚本接口。srcDir
和 rootDir
相同。服务端生命周期:
// store/index.js
export const state = {
token: ''
}
export const mutations = {
setToken(state,token) {
state.token = token;
}
}
export const actions = {
nuxtServerInit(store,context) {
store.commit('setToken','123456')
console.log(store,'nuxtServerInit');
}
}
//全局 nuxt.config.js进行配置,创建文件夹并创建文件
// nuxt.config.js
router:{
middleware:'auth'
}
// middleware/auth.js
export default function () {
console.log('auth middleware');
}
//页面 页面中进行配置,创建文件夹并创建文件
// page/index.vue
<script>
export default {
middleware: 'auth',
//第二种写法 middleware(){}
}
</script>
// middleware/auth.js
export default function () {
console.log('auth middleware');
}
// pages/index.vue
validate({params,query}){
console.log('validate');
return /^\d+$/.test(query.id);
}
// pages/index.vue
asyncData({params,query}){
console.log('asyncData');
},
asyncData
不同的是,fetch
方法不会将数据合并到组件的数据中,而是通过返回一个 Promise 对象来处理异步数据。fetch有this。// pages/index.vue
fetch({app,store,params}){
console.log('fetch');
},
服务端和客户端共有的生命周期
beforeCreate(){
console.log('beforeCreate');
},
created(){
console.log('created');
},
客户端生命周期
自动生成
路由 - NuxtJS | Nuxt.js 中文网
Nuxt.js 依据 pages
目录结构自动生成 vue-router 模块的路由配置。
页面之间使用路由,使用< nuxt-link >标签。
// pages/index.vue
列表页
使用router.js
下载:@nuxtjs/router,npm i @nuxtjs/router -S
下载完成后在nuxt.config.js的modules模块进行配置
modules:[
'@nuxtjs/router'
],
把router文件放入nuxt项目根目录,必须是router.js
修改router.js的内容
nuxtjs/router返回的内容和vue有所不同
import Vue from 'vue'
import Router from 'vue-router'
import MyPage from '~/components/my-page'
Vue.use(Router)
export function createRouter() {
return new Router({
mode: 'history',
routes: [
{
path: '/',
component: MyPage
}
]
})
}
router.js
nuxtjs
中间件:middleware
插件:plugins
plugins:[
'~/plugins/router.js'
],
export default ({app}=>{
app.router.beforeEach((to,from.next)=>{
console.log(to);
next();
})
}
store
目录,如果该目录存在,它将做以下的事情:
vuex
模块vuex
模块 加到 vendors 构建配置中去Vue
根实例的 store
配置项export default {
head: {
title: 'demo',
meta: [
{hid:'description',name:'description',content:'xxx'},
{hid:'keywords',name:'keywords',content:'xxx'}
],
},
}
head(){
retrun {
title: 'demo',
meta: [
{hid:'description',name:'description',content:'xxx'},
{hid:'keywords',name:'keywords',content:'xxx'}
],
}
}
css: [
'~/static/reset.css'
'@/assets/css/main.scss'
],
plugins
属性配置的所有插件会在 Nuxt.js 应用初始化之前被加载导入。plugins: [
'~/plugins/aaa.js',
'~/plugins/element.js'
],
npm install @nuxtjs/axios -S
和npm install axios -S
区别在于前者可以直接使用而不需要引入,@nuxt/***是Nuxt.js团队提供的官方模块npm install @nuxtjs/axios @nuxtjs/proxy -S
// nuxt.config.js
modules: [
'@nuxtjs/axios',
'@nuxtjs/proxy'
],
axios:{
proxy:true,
retry:{retries:3},
baseUrl:process.env._ENV == 'prod'?'dev'
}
proxy:{
'/api':{
target:'http://localhost:4000',
pathRewrite:{
'^/api':'',
}
}
}
// nuxt.config.js
loading: false
// nuxt.config.js
modules: [
'@nuxtjs/axios',
'@nuxtjs/proxy'
],
axios:{
proxy:true,
retry:{retries:3},
baseUrl:process.env._ENV == 'prod'?'dev'
}
proxy:{
'/api':{
target:'http://localhost:4000',
pathRewrite:{
'^/api':'',
}
}
}
// nuxt.config.js
loading: false