Nuxt.js(Vue SSR)创建项目到服务器(Nginx+PM2)部署详细流程(上)

简介: Nuxt.js(Vue SSR)创建项目到服务器(Nginx+PM2)部署详细流程

一、什么是 SSR ?

  • SSR 就是 服务器渲染,什么是 服务器渲染?由 服务器 组装好 DOM 元素,生成 HTML 字符串给到浏览器,也就是在浏览器里面是可以看到整个页面的 DOM 源码的。
  • SSR 解决的问题:
    SEO:搜索引擎的优先爬取级别是页面的 HTML 结构,当我们使用 SSR 的时候,服务端已经生成了与业务相关联的 HTML,这样的信息对于 SEO 是很友好的。
    内容呈现:客户端无需等待所有的 JS 文件加载完成即可看见渲染的业务相关视图(压力来到了服务端这边,这也是需要做权衡的地方,需要区分哪些由服务端渲染,哪些可以交给客户端)。
  • SSR 相关的弊端:
    代码兼容:对于开发人员来讲,需要去兼容代码在不同环境的运行 Vue SSR 所需要的服务端环境是 Node,有一些客户端的对象,比如 domwindows 之类的则无法使用。
    服务器负载:相对于前后端分离模式下服务器只需要提供静态资源来说,SSR 需要的服务器负载更大,所以在项目中使用 SSR 模式要慎重,比如一整套图表页面,相对于服务端渲染,可能用户不会在乎初始加载的前几秒,可以交由客户端使用类似于骨架屏,或者懒加载之类的提升用户体验。
  • VueVue SSR原生HTML 页面源码区别对比,在网页上右键查看源码:
    Vue SSR原生HTML 是可以看到源码标签的

    Vue 默认是看不到源码标签的,因为它是 JS 组装的。


二、什么是 Nuxt.js ?

  • 目前做 SSR 的方式有几种,大概列举一下:
    1、前端编写 原生静态页面,给到服务器,通过服务器框架进行组合数据,例如 phpWeb 开发
    2、使用 prerender-spa-plugin 插件,作者是 Vue 核心团队的成员,这种实现方式并不叫 SSR,而是 预渲染。不过效果上是一样的,甚至某种程度上来说可能要比 SSR 更好。相比官方提供的 SSR 繁琐配置prerender 配置更简单快捷。
    3、Vue 官方提供的轮子在 Node 端做 SSR, 相对于 prerender 插件来说,SSR上手真的超级复杂,有兴趣可以自行查看 Vue SSR 指南。这种方法可以做到真实数据实时渲染,完全可供 SEO 小蜘蛛尽情的爬来爬去,完全前后端同构,路由配置共享,不再影响服务器 404 请求,但是配置比较麻烦、处理流程比较复杂 (比对预渲染插件,复杂太多)约束较多,对服务器会造成较大的压力,服务器成本太高了。
    4、Nuxt.js 是使用 WebpackNode.js 进行封装的基于 VueSSR 框架,不需要自己搭建一套 SSR 程序,而是通过其约定好的文件结构和 API 就可以实现一个首屏渲染的 Web 应用。
    我这里选择使用 Nuxt.js 来做 SSR

三、通过 Nuxt.js 创建项目

  • Nuxt.js 官方安装流程,项目需要依赖 Node 环境,我这里用的包管理工具是 NPMNuxt.js 版本是 2.14.5
  • 创建项目,确保安装了 npxnpxNPM 版本 5.2.0 默认安装了):
$ npx create-nuxt-app <项目名>
$ npm create nuxt-app <项目名>
$ yarn create nuxt-app <项目名>
  • 或者用 yarn
$ yarn create nuxt-app <项目名>
  • 我这里用 npx 创建一个测试项目,例如:
$ npx create-nuxt-app nuxt-test
// 进入到文件夹,执行创建项目命令
dengzemiaodeMacBook-Pro:test dengzemiao$ npx create-nuxt-app nuxt-test
create-nuxt-app v3.5.2
✨  Generating Nuxt.js project in nuxt-test
// 项目初始配置,自己看着选,用什么选什么 不懂就选 None,后面也可以装的。
? Project name: nuxt-test
? Programming language: JavaScript
? Package manager: Npm
? UI framework: None
? Nuxt.js modules: Axios - Promise based HTTP client
? Linting tools: (Press <space> to select, <a> to toggle all, <i> to invert sele
ction)
? Testing framework: None
? Rendering mode: Universal (SSR / SSG)
? Deployment target: Server (Node.js hosting)
? Development tools: jsconfig.json (Recommended for VS Code if you're not using 
typescript)
? What is your GitHub username? dengzemiao
? Version control system: None
.....等待一段时间,就会提示创建项目成功
🎉  Successfully created project nuxt-test
// 如果是开发中,运行 npm run dev 就可以,开发者模式
To get started:
  cd nuxt-test
  npm run dev
// 如果是需要发布到线上了,需要先 build 在 start 才能正式发布
To build & start for production:
  cd nuxt-test
  npm run build
  npm run start

四、Nuxt.js 本地运行

  • 这篇文章只讲 创建项目发布服务器,以及服务器怎么部署才能通过服务器访问,其他项目细节配置放在其他文章中去写。
  • 创建完成项目之后,可以先运行项目一下,用上面 To get startedTo build & start for production 中的方式运行起来项目,只是前者是 development 模式,后者是 production 模式。
dengzemiaodeMacBook-Pro:test dengzemiao$ cd nuxt-test
dengzemiaodeMacBook-Pro:nuxt-test dengzemiao$ npm run dev
> nuxt-test@1.0.0 dev /Users/dengzemiao/Desktop/Project/web/test/nuxt-test
> nuxt
   ╭───────────────────────────────────────╮
   │                                       │
   │   Nuxt @ v2.14.12                     │
   │                                       │
   │   ▸ Environment: development          │
   │   ▸ Rendering:   server-side          │
   │   ▸ Target:      server               │
   │                                       │
   │   Listening: http://localhost:3000/   │
   │                                       │
   ╰───────────────────────────────────────╯
  • 然后通过上面的 http://localhost:3000/ 打开浏览器进行访问,但是这个是开发环境。
  • pages 里面的 .vue 文件都会被自动转成路由,文件夹也是一样。
  • 例如:项目 pages 文件夹里面有个 index.vue 文件,它会被编译成 index.html,在路由中也就是 /index,可以尝试修改 index.vue 里面的内容,或者新建一个 .vue 文件进行测试内容。
  • 例如:我在 pages 里面创建一个测试文件 dzm.vue,运行起来项目,访问的路径就是 http://localhost:3000/dzm

<template>
  <div>
    dzm 测试页面 {{ env }}
  </div>
</template>
<script>
export default {
  data () {
    return {
      // 当前启动的环境 development: 开发环境 production: 生产环境
      env: process.env.NODE_ENV
    }
  }
}
</script>

五、Nuxt.js 直接 ip 访问项目(生产和开发都适用)

  • 运行开发环境 $ npm run dev
╭───────────────────────────────────────╮
   │                                       │
   │   Nuxt @ v2.14.12                     │
   │                                       │
   │   ▸ Environment: development          │
   │   ▸ Rendering:   server-side          │
   │   ▸ Target:      server               │
   │                                       │
   │   Listening: http://localhost:3000/   │
   │                                       │
   ╰───────────────────────────────────────╯
  • 运行生产环境 $ npm run build + $ npm run start
╭──────────────────────────────────────────╮
   │                                          │
   │   Nuxt @ v2.14.12                        │
   │                                          │
   │   ▸ Environment: production              │
   │   ▸ Rendering:   server-side             │
   │   ▸ Target:      server                  │
   │                                          │
   │   Memory usage: 29.1 MB (RSS: 73.1 MB)   │
   │                                          │
   │   Listening: http://localhost:3000/      │
   │                                          │
   ╰──────────────────────────────────────────╯
  • 通过上面的两个运行的结果,得到的地址都是 http://localhost:3000/,这个是固定本地 localhost:3000 才可以进访问,需要改成支持本地 ip 也能访问,也就是你拿到本机电脑的 ip 加上端口也能进行访问到,例如: http://10.0.93.169:3000

相关文章
|
10天前
|
数据采集 JavaScript 搜索推荐
ssr(Nuxt+Next.js)
服务器端渲染(SSR)技术可在服务器上生成页面HTML,提升首屏加载速度和SEO效果。Nuxt.js基于Vue.js,提供自动化路由管理、页面级数据获取和模块化扩展;Next.js基于React.js,支持SSR、静态生成和文件系统路由。两者均具备快速加载、SEO友好和处理复杂页面的优点,但也存在服务器压力大、开发限制和调试困难的缺点。开发者可根据项目需求和技术栈选择合适的框架。
|
1月前
|
缓存 监控 JavaScript
如何优化 Vue 的执行流程?
【10月更文挑战第2天】
102 59
|
15天前
|
数据采集 JavaScript 搜索推荐
服务器端渲染(SSR)(Nuxt+Next.js)
服务器端渲染(SSR)技术在服务器上生成页面HTML,提升首屏加载速度和SEO效果。Nuxt.js和Next.js分别是基于Vue.js和React.js的流行SSR框架。Nuxt.js提供自动化路由管理、页面级数据获取和布局系统,支持SSR和静态站点生成。Next.js支持SSR、静态生成和文件系统路由,通过`getServerSideProps`和`getStaticProps`实现数据获取。SSR的优点包括首屏加载快、SEO友好和适合复杂页面,但也会增加服务器压力、开发限制和调试难度。选择框架时,可根据项目需求和技术栈决定使用Nuxt.js或Next.js。
|
20天前
|
缓存 负载均衡 监控
性能优化:Node.js高效服务器开发技巧与最佳实践
【10月更文挑战第29天】在Node.js服务器开发中,性能优化至关重要。本文介绍了几种高效开发的最佳实践,包括使用缓存策略、采用异步编程、实施负载均衡和性能监控。通过示例代码展示了如何实现这些技术,帮助开发者构建更快、更稳定的Node.js应用。
34 2
|
28天前
|
数据采集 JavaScript 搜索推荐
ssr(Nuxt+Next.js)
ssr(Nuxt+Next.js)
|
1月前
|
JSON JavaScript 前端开发
使用 Node.js 和 Express 构建 RESTful API 服务器
【10月更文挑战第3天】使用 Node.js 和 Express 构建 RESTful API 服务器
|
1月前
|
Web App开发 JavaScript 前端开发
使用Node.js和Express框架构建Web服务器
使用Node.js和Express框架构建Web服务器
|
1月前
|
JavaScript 应用服务中间件 nginx
nginx部署vue项目
本文介绍了将Vue项目部署到Nginx的步骤,包括构建Vue项目、上传dist文件夹到服务器、安装Nginx、配置Nginx代理静态文件以及重启Nginx,确保了Vue应用可以通过域名或IP地址访问。
110 1
|
1月前
|
负载均衡 算法 应用服务中间件
Nginx入门 -- 理解 Nginx 的请求处理流程
Nginx入门 -- 理解 Nginx 的请求处理流程
104 1
|
1月前
|
前端开发 JavaScript 应用服务中间件
linux安装nginx和前端部署vue项目(实际测试react项目也可以)
本文是一篇详细的教程,介绍了如何在Linux系统上安装和配置nginx,以及如何将打包好的前端项目(如Vue或React)上传和部署到服务器上,包括了常见的错误处理方法。
350 0
linux安装nginx和前端部署vue项目(实际测试react项目也可以)
下一篇
无影云桌面