完整的 nuxt3 + vue + ts 服务端渲染项目搭建教程,克隆就能用,新手必学,建议收藏

目录

前言

一、新建仓库

1.1 新建 gitee 仓库

1.2 克隆到本地

二、初始化 nuxt 项目

2.1 初始化 nuxt

2.1.1 使用什么包管理工具

2.1.2 是否初始化 git仓库

2.1.3 整理项目结构

2.1.4 提交代码

2.2 运行项目

2.2.1 运行 npm run dev

2.2.2 增加 .nvmrc 文件

2.2.3 运行项目

2.2.4 提交代码

三、添加各种插件

3.1 安装 sass

3.1.1 增加 assets/css/common.scss

3.2.2 增加 pages/index.vue

3.2.3 修改 app.vue

3.2.4 运行项目

3.2.5 提交代码

3.2 使用 autoprefixer

3.2.1 安装 autoprefixer

3.2.2 在 nuxt.config.ts 中配置

3.2.3 提交代码

3.3 安装 tailwindcss

3.3.1 安装 tailwindcss

3.3.2 在 nuxt.config.ts 中配置

3.3.3 增加 tailwind.config.js

3.3.4 修改 common.scss

3.3.5 测试一下

3.3.6 提交代码

3.4 使用 pinia

3.4.1 安装 pinia

3.4.2 安装 @pinia/nuxt

3.4.3 配置 nuxt.config.ts

3.4.4 新建 store/index.ts

3.4.5 测试一下

3.4.6 提交代码

3.5 使用 nuxt-icons

3.5.1 安装 nuxt-icons

3.5.2 在 nuxt.config.ts 中配置

3.5.3 新建 assets/icons

3.5.4 测试一下

3.5.5 提交代码

3.6 使用 prettier + eslint

3.6.1 安装插件

3.6.2 新增 .eslintrc.js

3.6.3 新增 .prettierrc.js

3.6.4 新增 .prettierignore

3.6.5 格式化所有文件

3.6.6 提交代码

3.6.7 使用路径别名

3.6.8 应用全局样式

3.7 增加 browserslist

3.7.1 增加 browserslist

3.7.2 提交代码

3.8 使用 ant-design-vue

3.8.1 安装 ant-design-vue

3.8.2 引用样式​编辑

3.8.3 测试一下

3.8.4 提交代码

小结

四、请求封装

4.1 安装 axios

4.2 新建/复制文件

五、公共方法

5.2 安装 callapp-lib

5.3 新建/复制文件

5.4 提交代码

六、多语言

6.1 安装 vue-i18n

6.2 安装 @nuxtjs/i18n

6.3 新建 plugins 文件夹

6.4 提交代码

七、测试

7.1 测试请求

7.2 解决问题

7.3 测试请求

7.3.1 增加请求

7.3.2 测试效果

7.3.3 提交代码

7.4 测试多语言

7.4.1 增加代码

7.4.2 测试效果

7.4.3 提交代码

八、部署

8.1 本地打包

8.1.1 运行 npm run build 打包

8.1.2 运行 npm run preview 预览

8.1.3 解决问题

8.1.4 提交代码

8.2 仓库推送到远端

8.3 使用 vercel 部署

总结


前言

在我的 《前端工程化系统教程》用了3篇文章,来详细讲解 vite + ts +vue3 项目的搭建流程,本篇文章的内容是,搭建服务端渲染的 Nuxt3 项目。有很多内容和在 vite 项目中有重叠,所以可能不够详细,大家可以参考之前的文章。vite 是打包工具,nuxt3 也是基于 vite的一个框架,所以二者大同小异。

项目的完整的流程图如下

一、新建仓库

1.1 新建 gitee 仓库

我用 gitee 仓库纯粹是因为不方便科学上网,大家也可以使用 github

我的仓库地址是 learn-nuxt,这里面有个小问题,如果你的仓库没有一个文件,是没有 master 分支的,所以至少需要初始化一个文件,比如readme之类的。还可以根据 git 的提示增加开源许可证之类的。

1.2 克隆到本地

在之前这篇搭建vite项目的文章中,是先创建本地的仓库,再创建远端gitee仓库,然后再关联起来,都行,看你怎么方便怎么来。

二、初始化 nuxt 项目

在本地电脑选择一个文件夹初始化 nuxt 项目,我选择在本地仓库地址 learn-nuxt 的文件夹下面新建项目,因为如果你在 workspace 下面再创建一个名字叫 learn-nuxt 的项目,二者名字会冲突。

2.1 初始化 nuxt

pnpm dlx nuxi@latest init learn-nuxt

 运行之后有几个选项,

2.1.1 使用什么包管理工具

我们选择 pnpm

2.1.2 是否初始化 git仓库

我们选择 yes,这个步骤选择 yes,其实就是给你自动创建一个 .gitignore 文件

2.1.3 整理项目结构

初始化之后项目结构如下,我们可以看见,项目有两层learn-nuxt文件夹,所以我们要把文件复制到外层,删掉里面的

最终的项目结构如下

2.1.4 提交代码

2.2 运行项目

2.2.1 运行 npm run dev

npm run dev

然后我们发现有问题,首先是一个警告,说当前版本 node 是 16.16.0 可能有兼容问题,需要升级到18。随后就是一个运行错误。其实这个问题就是因为 node 版本过低导致的。 

请看nuxt官方的文档,强调了需要使用 16 以上的 node,虽然我的是1 6.16.0 但是看起来还是版本不够,所以我们可以需要使用 node 18 的版本。

Q: 你知道为什么 node16 版本太低,就用 node18 么,咋不用 node17 呢?  答案在这里

2.2.2 增加 .nvmrc 文件

配置 .nvmrc 里面写上需要的 node 版本号,再下一次打开 terminal 的时候会自动执行 nvm use 命令,切换 node 版本,当然这有几个条件需要我们:

  1. 安装了 node18
  2. 安装了 nvm
  3. 使用 vscode【因为这是 vccode 的插件的功能】
  4. 使用 mac 电脑【因为这个插件暂时不支持 window 】

2.2.3 运行项目

这回我们可以成功运行项目了

2.2.4 提交代码

三、添加各种插件

3.1 安装 sass

pnpm i sass -D

sass 是每一个使用 scss 项目都要安装的一个预处理器 ,运行命令发现下面这个错误,按照提示,重新运行 pnpm install ,然后再安装 sass 即可。

3.1.1 增加 assets/css/common.scss

在根目录下,依次新建文件夹 assets 、css 以及文件common.scss,并加入样式

3.2.2 增加 pages/index.vue

nuxt 项目是自动生成路由的,无需使用 vue-router,所有的路径都放在 pages 文件夹下面

3.2.3 修改 app.vue

3.2.4 运行项目

完美运行

3.2.5 提交代码

3.2 使用 autoprefixer

3.2.1 安装 autoprefixer

pnpm install autoprefixer -D

3.2.2 在 nuxt.config.ts 中配置

3.2.3 提交代码

3.3 安装 tailwindcss

在 vite项目中,我们使用的是 windicss,这篇文章我们用 tailwindcss,他们两个其实差不多,有部分语法不通,但是 tailwindcss 的社区更加强大,你想用啥都行。

3.3.1 安装 tailwindcss

pnpm i tailwindcss -D

3.3.2 在 nuxt.config.ts 中配置

3.3.3 增加 tailwind.config.js

3.3.4 修改 common.scss

3.3.5 测试一下

修改 pages/index.vue 使用 tailwind 语法设置样式

3.3.6 提交代码

这里面有一个小问题,如果你用的是 vscode,在上面一个步骤中编辑器可能有这个提示红线。

仔细一看,提示的错误是,模版只能有一个根元素。

但是仔细想想不对啊!!我们用的 vue3 已经允许模版有多个根元素了,所以这个肯定不是语法错误,是编辑器提示的问题。

这是因为我们安装了两个 vcode 关于 vue 的提示插件,一个是针对 vue2 的,一个是针对vue3 的,我们在这个项目中只需要保留对 vue3 的 volar 即可

当然,我们也不能把 vuter 卸载了,要不其他的 vue2 项目就不给提示了,所以我们只需要把vuter 插件针对这个项目禁用即可,禁用后需要重启编辑器才能生效

3.4 使用 pinia

3.4.1 安装 pinia

pnpm i pinia

3.4.2 安装 @pinia/nuxt

pnpm i @pinia/nuxt

3.4.3 配置 nuxt.config.ts

3.4.4 新建 store/index.ts

3.4.5 测试一下

3.4.6 提交代码

3.5 使用 nuxt-icons

3.5.1 安装 nuxt-icons

pnpm i nuxt-icons

3.5.2 在 nuxt.config.ts 中配置

3.5.3 新建 assets/icons

随便放一个svg 图片进去

3.5.4 测试一下

3.5.5 提交代码

3.6 使用 prettier + eslint

3.6.1 安装插件

后面的 typescript 一定要安装,这个和 vite 项目不通,nuxt3 项目初始化后默认没有 typescript 插件

pnpm i @typescript-eslint/eslint-plugin @typescript-eslint/parser eslint eslint-config-prettier eslint-plugin-prettier prettier eslint-plugin-vue typescript -D

3.6.2 新增 .eslintrc.js

3.6.3 新增 .prettierrc.js

3.6.4 新增 .prettierignore

3.6.5 格式化所有文件

需要重启编辑器

 pnpm eslint --fix ./**/*.vue ./**/*.ts

 这个时候直接运行,会有一个错误

 我们需要去掉 package.json的这一句话,就行了

3.6.6 提交代码

3.6.7 使用路径别名

3.6.8 应用全局样式

把 common.scss 配置在 nuxt.config.ts 中,这样所有文件都可以用里面的全局样式了

发现一个问题,刚才没注意,配置文件里面有个ts 错误

解决办法,增加一句 导入的语句即可,别忘了提交代码

3.7 增加 browserslist

3.7.1 增加 browserslist

3.7.2 提交代码

3.8 使用 ant-design-vue

3.8.1 安装 ant-design-vue

pnpm i ant-design-vue

3.8.2 引用样式

3.8.3 测试一下

3.8.4 提交代码

小结

到此为止,项目需要用到的基本框架都搭建完成了,这一部分内容对应的就是 vite 项目的第一篇文章的内容,大同小异。接下来参照 第二篇文章 完成封装请求和多语言等逻辑。

四、请求封装

对于请求的封装,和 vite 项目内容基本一致,所以不做太过细致的介绍。可以把 vite 项目的文件都复制过来,缺啥补啥就行了。想看具体实现步骤,去这里

4.1 安装 axios

pnpm i axios

4.2 新建/复制文件

新建 service 文件夹,然后从这个项目复制同名文件到 service文件夹下

五、公共方法

公共方法这一部分的详细讲解在这里。

pnpm i js-cookie

5.2 安装 callapp-lib

pnpm i callapp-lib

5.3 新建/复制文件

新建 global 文件夹,然后从这个项目复制同名文件到 global 文件夹下,不用复制 i18n 文件夹,因为 nuxt 项目和 vite 项目的多语言有点区别。

5.4 提交代码

这部分其实有一个 bug,因为 nuxt 是服务端渲染的,所以有些问题需要调整,在第八节部署的部分有具体问题和解决方案。

六、多语言

6.1 安装 vue-i18n

pnpm i vue-i18n

6.2 安装 @nuxtjs/i18n

这一步会导致一个 bug,项目运行不起来,别着急,在下面第七节有解决办法

npm i @nuxtjs/i18n -D

6.3 新建 plugins 文件夹

在根目录下新建 plugins 文件夹,下面新建以下几个文件

6.4 提交代码

七、测试

7.1 测试请求

运行 npm run dev 报了一个错误

研究半天发现是  @nuxtjs/i18n 的版本不兼容

7.2 解决问题

重新安装 @nuxtjs/i18n 高版本

pnpm i @nuxtjs/i18n@8.0.0-beta.10 -D

这回可以正常运行了,提交修复的代码

7.3 测试请求

7.3.1 增加请求

7.3.2 测试效果

7.3.3 提交代码

7.4 测试多语言

7.4.1 增加代码

7.4.2 测试效果

7.4.3 提交代码

八、部署

8.1 本地打包

8.1.1 运行 npm run build 打包

看是否可以正常打包,发现可以正常打包。

8.1.2 运行 npm run preview 预览

很遗憾,这一步报错了

8.1.3 解决问题

全局搜索 location ,发现 env.ts 中有用到,所以我们需要改一下,服务端是没有浏览器对象的。关于在 nuxt 项目中区分环境,我的这篇文章有详细的介绍,可以看一下。

这回可以正常预览了。

8.1.4 提交代码

8.2 仓库推送到远端

项目的完整的流程如下,现在可以将项目推送到远端 gitee 仓库了。

8.3 使用 vercel 部署

你可以使用 vercel部署,但是需要新建一个github仓库,但是其实部署了也没啥用,我这里就不部署了,想要部署的可以参考这篇文章的第八小节

总结

整篇文章结束,一个完整的 nuxt3 + vue + ts 项目搭建完成,已经可以正常使用了。以后如果你想要一个服务端渲染的项目,直接克隆这个项目就可以使用,非常方便,但是别忘了改名字!!

再次声明,这篇文章是在我的专栏《前端工程化系统教程》中的 vite + ts +vue3 教程基础上实现的,尤其是请求封装的部分,在第三篇有详细的介绍,如果有不懂的可以先看一下,也可以在评论区尽情评论!

内容比较多,难免有疏漏,有不对的地方欢迎大家指出!

项目地址是

learn-nuxt: 学习nuxt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/261369.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

孩子还是有一颗网安梦——Bandit通关教程:Level 16 → Level 17

🕵️‍♂️ 专栏《解密游戏-Bandit》 🌐 游戏官网: Bandit游戏 🎮 游戏简介: Bandit游戏专为网络安全初学者设计,通过一系列级别挑战玩家,从Level0开始,逐步学习基础命令行和安全概念…

对大学生创新创业某赛事目前存在的烂尾楼现象的一些研究的分享(1)

经过对”某某网”大学生创新创业大赛国赛第五届-第八届部分金奖项目的研究,进行较为充分的信息溯源、穿透调查,我发现不少项目存在赛事材料画大饼,严重不切合实际,参赛人员并非真正创新创业,赛后迅速销声匿迹、烂尾切割…

MFC 消息映射机制

目录 消息映射机制概述 宏展开 宏展开的作用 消息映射机制的执行流程 消息处理 消息映射机制概述 MFC的消息映射映射机制是可以在不重写WindowProc虚函数的大前提下,仍然可以处理消息。 类必须具备的要件 类内必须添加声明宏 DECLARE_MESSAGE_MAP() 类外…

刷题记录第五十一天-去除重复字母

题目要求的是字典序最小的结果。只需要理解一点就是按大小顺序排列的字符串的字典序就是最小的,如“abcd”这种。 解题思路如下: 首先明确要使用栈结构,并且是从栈底到栈顶递增,要尽可能保证递增,这样就能保证字典序最…

exsi 6.5 添加RTL8111/8168/8411 网卡驱动重新打包

参考安装esxi时候的No Network Adapters报错 解决办法-CSDN博客 lspci 查看网卡型号 RTL8111/8168/8411 PCI Express 驱动下载地址 List of currently available ESXi packages - V-Front VIBSDepot Wiki 注入驱动程序 https://vibsdepot.v-front.de/tools/ESXi-Customi…

mysql 23-2day 数据库查询(DQL)

目录 数据库查询(DQL)环境:准备一个表格作为查询环境查看数据根据要求查看数据运算查询as 可以修改字段名字 进行查询查询所有部门拼接两个字段查询 2017年入职的员工一个是空null 一个是空白查询 NULL集合排序查询查看有那些组通配符正则查询函数 数据库查询(DQL) …

传输层协议分析--第4关:UDP 包分析

任务描述 本关任务:能够掌握简单的 UDP 包分析。 相关知识 为了更好掌握本章内容,你需要了解的有: UDP 报文的简介;UDP 报文格式;Wireshark 软件中的 UDP 抓包分析。 UDP 简介 UDP(User Datagram Pro…

Python与Flink的完美融合:合流基本操作解析

更多资料获取 📚 个人网站:ipengtao.com Apache Flink 是一个流式处理框架,支持复杂事件处理和大规模数据分析。在 Flink 中,合流(Join)是一种常见的操作,用于将两个或多个流中的数据按照指定条…

12.21 汇编点亮STM32MP157小灯

.text .global _start _start: 时钟使能pb6 pf6 pe9LDR r0,0x50000A28LDR r1,[r0]ORR r1,r1,#(0x1<<4)ORR r1,r1,#(0x1<<5)ORR r1,r1,#(0x1<<1)STR r1,[r0]配置GPIO模式LDR r0,0x50006000LDR r1,[r0]BIC r1,r1,#(0x2<<20)ORR r1,r1,#(0x1<<20)B…

【UE】阅读和理解距离剔除源码

距离剔除 官方文档&#xff1a;虚幻引擎中的剔除距离体积 | 虚幻引擎5.2文档 (unrealengine.com) 距离剔除&#xff0c;顾名思义&#xff0c;是根据距离来将场景对象的渲染进行加卸载的一种管理方式。 用距离剔除&#xff0c;可以减轻场景同时渲染大量物品的情况&#xff0c;…

ACM32F42x/4x3优势有那些?可应用在那些场景上?

优势 • 最大4MB Flash&#xff0c;可用于同时存储程序代码静态图片 • 128KB/196KB SRAM用于程序堆栈部分图片缓存 • 叠封最大8MB PSRAM&#xff0c;用于大容量图片缓存 • 180MHz M33内核&#xff0c;处理性能极佳 • 可选QFN32(4x4)、QFN48(5x5)小封装&#xff0…

动画渲染需要什么配置电脑?动画云渲染有什么优惠?

​在电影制作、游戏开发、广告设计以及其他设计领域&#xff0c;CG&#xff08;计算机图形学&#xff09;这一发展迅速、并融合了艺术创作与科技应用的领域发挥了重大作用。对于追求在 CG 创作中达到卓越表现的人来说&#xff0c;拥有一台高性能电脑设备至关重要。为此&#xf…

利用prometheus+grafana进行Linux主机监控

文章目录 一.架构说明与资源准备二.部署prometheus1.上传软件包2.解压软件包并移动到指定位置3.修改配置文件4.编写启动脚本5.启动prometheus服务 三.部署node-exporter1.上传和解压软件包2.设置systemctl启动3.启动服务 四.部署grafana1.安装和启动grafana2.设置prometheus数据…

Python实验作业,爬虫,中国院士信息

实验内容&#xff1a; 爬取中国工程院网页上&#xff0c;把每位院士的简介保存为本地文本文件&#xff0c;把每位院士的照片保存为本地图片&#xff0c;文本文件和图片文件都以院士的姓名为主文件名。 实验代码&#xff1a; import os.path import time from urllib.request …

web打印技术方案

在B/S应用系统开发中常常遇到表单打印需求&#xff0c;尤其是OA、ERP类的企业运营管理系统&#xff0c;打印的需求很常见&#xff0c;但WEB应用的打印一直以来是一个难题&#xff0c;特别是在应用中完成标签打印&#xff08;如包裹面单、货运标签等&#xff09;、票据打印&…

华为OD机试 - 区间交集 - 深度优先搜索dfs算法(滥用)(Java 2023 B卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述备注用例1、输入2、输出3、说明 四、解题思路1、核心思路&#xff1a;2、具体步骤 五、Java算法源码再重新读一遍题目&#xff0c;看看能否优化一下~解题步骤也简化了很多。 六、效果展示1、输入2、输出3、说明 华为OD机试 2…

用最通俗的语言讲解 TCP “三次握手,四次挥手”

目录 一. 前言 二. TCP 报文的头部结构 三. 三次握手 3.1. 三次握手过程 3.2. 为什么要三次握手 四. 四次挥手 4.1. 四次挥手过程 4.2. 为什么要四次挥手 五. 大白话说 5.1. 大白话说三次握手 5.2. 大白话说四次挥手 六. 总结 一. 前言 TCP 是一种面向连接的、可靠…

【SpringBoot快速入门】(3)SpringBoot整合junit和MyBatis 详细代码示例与讲解

目录 1.SpringBoot整合junit1.1 环境准备1.2 编写测试类 2.SpringBoot整合mybatis2.1 回顾Spring整合Mybatis2.2 SpringBoot整合mybatis2.2.1 创建模块2.2.2 定义实体类2.2.3 定义dao接口2.2.4 定义测试类2.2.5 编写配置2.2.6 测试2.2.7 使用Druid数据源 之前我们已经学习的Spr…

I.MX6ULL_Linux_驱动篇(47)linux RTC驱动

RTC 也就是实时时钟&#xff0c;用于记录当前系统时间&#xff0c;对于 Linux 系统而言时间是非常重要的&#xff0c;就和我们使用 Windows 电脑或手机查看时间一样&#xff0c;我们在使用 Linux 设备的时候也需要查看时间。本章我们就来学习一下如何编写 Linux 下的 RTC 驱动程…

spring boot回顾02

配置文件 SpringBoot使用一个全局的配置文件 &#xff0c; 配置文件名称是固定的 application.properties 语法结构 &#xff1a;keyvalue application.yml 语法结构 &#xff1a;key&#xff1a;空格 value 配置文件的作用 &#xff1a;修改SpringBoot自动配置的默认值&am…
最新文章