Nuxt 开发记录

190 篇文章 3 订阅
80 篇文章 1 订阅

 

Kyle_kk关注

0.3222018.12.25 18:38:59字数 1,559阅读 1,067

Nuxt.js是一个基于Vue.js的通用应用架构, 它预设了服务端渲染(SSR, Server Side Render)应用所需要的相关配置, 同时也支持生成静态站点.

1_EWDEUt0fqsmRgpYGFOOMew.png

1. 背景 & Nuxt简介

Nuxt 其一目的是为了解决单页面应用的SEO问题, 相比于我们平常的SPA页面. 在搜索引擎中由于无法从网页中被抓取内容信息(SPA页面的信息都是被打包到JS文件中,动态加载到页面中), 从而无法被用户所搜索到.
其二是服务端渲染相比于SPA页面渲染,在网络环境较差或者客户端运行在没有JavaScript的引擎上, 这时基于SSR渲染的页面能更好的展现原有的页面的内容,而单页面应用可能就会有很长的空白时间, 从而影响到用户的体验.

2. Nuxt应用架构

ujs-architecture.jpg

  • 客户端向服务器请求数据
  • 服务器端获取数据从API服务器
  • 服务端返回完整HTML页面给客户端
  • 客户端页面渲染使用SPA
  • 客户端直接请求API服务器

3. 项目创建

为了更加方便快速的创建项目, Nuxt.js 团队提供了一个脚手架工具 create-nuxt-app.确保你已经安装 npx (npx 已经被内置自 NPM 5.2.0)

$ npx create-nuxt-app <project-name>

它会让你进行一些选择:
- 在集成的服务器端框架之间进行选择:
- None(默认服务器)
- Express
- Koa
- Hapi
- Feathers
- Micro
- Adonis
- 选择您喜欢的UI框架:
- None
- Bootstrap
- Vuetify
- Bulma
- Tailwind
- Element UI
- Ant Design Vue
- Buefy
- 选择你想要的Nuxt模式(universal or SPA)
- 选择axios module
- 选择 Eslint
- 选择 Prettier
当运行完成时,它将安装所有依赖项,完成后启动项目:

$ npm run dev

应用现在会运行在 http://localhost:3000

4. 项目开发

4.1 目录结构

WX20181218-115512.png

  • api: api接口
  • assets:静态资源
  • components:组件
  • layouts: 布局目录
  • logs: 日志
  • middleware:中间件
  • pages: 页面目录
  • plugins:插件
  • nuxt.config.js: nuxt 配置文件

4.2 配置

Nuxt.js默认的配置涵盖了大部分的使用情形, 也可以通过修改 nuxt.config.js 来进行自定义配置.

WX20181218-121625@2x.png

 

  • plugins: 全局引入的插件
  • css: 全局引入的css, scss 等
  • head: 可以设置pages的头部信息, 如titile, meta信息等
  • loading:页面切换的时候加载组件显示的进度条
  • build: 自定义webpack的构建配置
  • env: 配置客户端和服务端共享的环境变量
  • cache:是否允许缓存
  • router:自定义配置vue-router的信息

4.3 路由

 

WX20181218-151044@2x.png


Nuxt.js 会根据pages的目录结构, 自动生成vue-router模块的路由配置. 如上图, 会生成 /dashboard/h5/:h5 , /dashboard/mws/:mws, ...
可以看出路径根据目录结构自动生成了, 动态路径需要在名字前添加下划线( _ )

 

4.4 布局

nuxt-views-schema.png

上图是Nuxt.js的布局架构. 最外层依旧是Document, 往里一层是一个layout层,在 Nuxt里面对应目录中的layouts文件夹,默认的pages下的页面都会套用 layouts/default.vue 的布局样式. 其中 <nuxt/> 相当于Vue中的 slot插槽的概念,
pages/**.vue的内容都会被填入<nuxt/>,其他的内容嵌套和平时的Vue单页面应用开发是一样的.

4.5 Vuex

在根目录创建 store 目录,就会默认引用 vuex 模块,除此之外,还进行了以下的操作:1)将 vuex 模块 加到 vendors 构建配置中去;2)设置 Vue 根实例的 store 配置项.
Nuxt.js 支持两种使用 store 的方式:

  • 普通方式:store/index.js 返回一个 Vuex.Store 实例
  • 模块方式:store 目录下的每个 .js 文件会被转换成为状态树指定命名的子模块 (当然,index 是根模块,相当于设置了namespaced: true)

Nuxt.js提供了模块方式的简单写法:使用状态树模块化的方式,store/index.js 不需要返回 Vuex.Store 实例,直接将 statemutations 和 actions 暴露出来即可。示例如下:

export const state = () => ({
  accesstoken: ''
})

export const mutations = {
  setAccesstoken (state, accesstoken) {
    state.accesstoken = accesstoken
  }
}

4.6 异步数据 asyncData

Nuxt.js 增加了一个 asyncData 方法,用于 在设置组件数据 之前 能够异步获取 或 处理数据。
由于asyncData 是在组件 初始化 之前被调用的,所以不能通过 this 引用组件的实例对象,可以使用上下文对象来实现某些功能,具体的上下文context

4.7 fetch 方法

与 asyncData 方法类似,不同的是它不会设置组件的数据,作用是设置store 数据。

5. Nuxt 渲染流程

nuxt-schema.png

上图是nuxt整个的渲染流程,在render之前的几个阶段, 都可以拿到context去做一些相应操作.

  • nuxtServerInit 是Nuxt.js在服务端初始化的时候定义在store中.这个对我们想要直接传递值给服务端非常有用,比如session, user.
  • middleware是一个自定义的方法,在每次渲染页面之前被调用.它可以注册到全局下(nuxt.config.js)也可以注册在单个页面或框架上.
  • validate 允许在动态路由组件中定义一个过滤器方法.
  • asyncDate,fetch asyncData可以让我们在页面绘制前调用方法获取需要的数据源;第一次时在服务端会被调用,之后客户端也会在页面之前被调用.fetchasyncData非常相似,区别只在于fetch只会用来改变store的状态,不能填充数据. *需要的一点.如果在方法中调用this会报错.因为asyncData & fetch在服务端会被调用所以this的当前组件并没有实例化
  • Render 被渲染

6. 一些遇到的坑

  • Window 或 Document 对象未定义?

    这是因为一些只兼容客户端的脚本被打包进了服务端的执行脚本中去。 对于只适合在客户端运行的脚本,需要通过使用 process.browser 变量来判断导入.

  • 服务端渲染v-for 列表

    当页面有列表内容在客户端渲染,刷新页面服务端会重复渲染列表结构,生成两份. 需要用<no-ssr/>组件进行设置,从而不在无武器渲染中呈现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 很抱歉,Nuxt.js 是一个基于 Vue.js 的服务器端渲染(SSR)框架,而微信小程序是一个基于微信官方的跨平台开发框架,它们并不直接兼容。 但是,如果你想将你在 Nuxt.js 中开发的应用移植到微信小程序,你可以考虑使用小程序框架 MPVue 来开发微信小程序。 MPVue 是一个使用 Vue.js 语法开发小程序的框架,可以使你的代码尽量保持一致,并且同时享受 Vue.js 和小程序的优点。 如果您对如何在 MPVue 中开发微信小程序有兴趣,可以参考 MPVue 官方文档和示例项目。 ### 回答2: 使用Nuxt开发微信小程序需要以下步骤: 1. 环境配置:首先需要确保在开发环境中已经安装了Node.js和Nuxt.js。可以使用npm或者yarn来安装这些依赖。 2. 创建Nuxt项目:使用Nuxt的命令行工具创建一个新的项目,可以使用命令`npx create-nuxt-app <project-name>`来创建项目。在创建项目的过程中,可以选择使用Vue.js和其他附加模块等。 3. 配置微信小程序:在项目根目录下的`nuxt.config.js`文件中,可以配置一些微信小程序的相关参数,例如小程序的app ID、app secret等。还可以根据需求配置其他Nuxt.js相关的配置项。 4. 开发小程序页面:在Nuxt项目中,可以使用Vue组件的方式来创建小程序页面。可以在`pages`目录下创建子目录和文件来定义页面和路由。在页面组件中,可以使用`<template>``<script>`和`<style>`标签来定义页面的模板、逻辑和样式。 5. 编写业务逻辑:在小程序页面中,可以编写业务逻辑代码。可以使用Vue.js的语法和Nuxt.js的内置功能,例如使用`this.$axios`发送网络请求、使用Nuxt的插件和中间件等。 6. 编译和部署:完成页面开发后,可以使用Nuxt提供的命令进行编译和打包,生成微信小程序所需的文件。最后可以使用微信开发者工具来预览和部署小程序。 需要注意的是,Nuxt.js是基于Vue.js的框架,可以很方便地开发和构建Web应用程序。但是在开发微信小程序时,需要注意一些微信小程序的特殊限制和要求,例如文件目录结构、API调用方式等。 希望以上回答对您有所帮助! ### 回答3: 要使用Nuxt开发微信小程序,您可以按照以下步骤进行: 1. 安装Nuxt.js:首先,您需要在计算机上安装Nuxt.js。您可以通过使用npm(Node.js包管理器)运行以下命令来执行此操作: ```shell npm install --global create-nuxt-app ``` 2. 创建新项目:使用Nuxt.js的命令行工具创建一个新的Nuxt项目。您可以按照提示进行操作,包括选择小程序模板和其他配置选项。 ```shell npx create-nuxt-app my-app ``` 这将创建一个名为`my-app`的新项目。 3. 配置微信小程序:进入新创建的项目文件夹,并找到`nuxt.config.js`文件。在该文件中,您可以配置用于微信小程序的相关设置,例如小程序的APPID和页面路径等。确保按照微信小程序开发文档的要求进行配置。 4. 开发微信小程序页面:在`pages`文件夹中创建您的小程序页面。您可以使用Vue.js和Nuxt.js的开发方式来编写小程序页面。您可以使用我们提供的组件和方法,以及使用asyncData()和fetch()方法进行数据获取。 5. 构建并运行:当您完成页面的开发后,使用以下命令构建并运行您的微信小程序。 ```shell npm run build npm run dev:wechat ``` 前一个命令将构建您的项目,而后一个命令将启动微信开发者工具,并将您的小程序加载到其中。您可以使用微信开发者工具来预览和调试您的小程序。 6. 发布小程序:一旦您认为小程序已准备好发布,您可以按照微信小程序开发文档的指导发布您的小程序。按照指示进行微信小程序的配置和上传等步骤。 注意:请确保阅读和遵循微信小程序开发文档中的要求和指导,以使您开发的小程序能够正常运行并通过审核。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI周红伟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值