目录
3.1.1 增加 assets/css/common.scss
在我的 《前端工程化系统教程》用了3篇文章,来详细讲解 vite + ts +vue3 项目的搭建流程,本篇文章的内容是,搭建服务端渲染的 Nuxt3 项目。有很多内容和在 vite 项目中有重叠,所以可能不够详细,大家可以参考之前的文章。vite 是打包工具,nuxt3 也是基于 vite的一个框架,所以二者大同小异。
项目的完整的流程图如下
我用 gitee 仓库纯粹是因为不方便科学上网,大家也可以使用 github
我的仓库地址是 learn-nuxt,这里面有个小问题,如果你的仓库没有一个文件,是没有 master 分支的,所以至少需要初始化一个文件,比如readme之类的。还可以根据?git 的提示增加开源许可证之类的。
在之前这篇搭建vite项目的文章中,是先创建本地的仓库,再创建远端gitee仓库,然后再关联起来,都行,看你怎么方便怎么来。
在本地电脑选择一个文件夹初始化 nuxt 项目,我选择在本地仓库地址 learn-nuxt 的文件夹下面新建项目,因为如果你在 workspace 下面再创建一个名字叫 learn-nuxt 的项目,二者名字会冲突。
pnpm dlx nuxi@latest init learn-nuxt
?运行之后有几个选项,
我们选择 pnpm
我们选择 yes,这个步骤选择?yes,其实就是给你自动创建一个 .gitignore 文件
初始化之后项目结构如下,我们可以看见,项目有两层learn-nuxt文件夹,所以我们要把文件复制到外层,删掉里面的
最终的项目结构如下
npm run dev
然后我们发现有问题,首先是一个警告,说当前版本 node 是 16.16.0 可能有兼容问题,需要升级到18。随后就是一个运行错误。其实这个问题就是因为 node 版本过低导致的。?
请看nuxt官方的文档,强调了需要使用 16 以上的 node,虽然我的是1 6.16.0 但是看起来还是版本不够,所以我们可以需要使用 node 18 的版本。
Q: 你知道为什么 node16 版本太低,就用 node18 么,咋不用 node17 呢???答案在这里
配置 .nvmrc 里面写上需要的 node 版本号,再下一次打开 terminal 的时候会自动执行 nvm use 命令,切换 node 版本,当然这有几个条件需要我们:
这回我们可以成功运行项目了
pnpm i sass -D
sass 是每一个使用 scss 项目都要安装的一个预处理器 ,运行命令发现下面这个错误,按照提示,重新运行 pnpm install ,然后再安装 sass 即可。
在根目录下,依次新建文件夹 assets 、css 以及文件common.scss,并加入样式
nuxt 项目是自动生成路由的,无需使用 vue-router,所有的路径都放在 pages 文件夹下面
完美运行
pnpm install autoprefixer -D
在 vite项目中,我们使用的是 windicss,这篇文章我们用 tailwindcss,他们两个其实差不多,有部分语法不通,但是 tailwindcss 的社区更加强大,你想用啥都行。
pnpm i tailwindcss -D
修改 pages/index.vue 使用 tailwind 语法设置样式
这里面有一个小问题,如果你用的是 vscode,在上面一个步骤中编辑器可能有这个提示红线。
仔细一看,提示的错误是,模版只能有一个根元素。
但是仔细想想不对啊!!我们用的 vue3 已经允许模版有多个根元素了,所以这个肯定不是语法错误,是编辑器提示的问题。
这是因为我们安装了两个 vcode 关于 vue 的提示插件,一个是针对 vue2 的,一个是针对vue3 的,我们在这个项目中只需要保留对 vue3 的 volar 即可
当然,我们也不能把 vuter 卸载了,要不其他的 vue2 项目就不给提示了,所以我们只需要把vuter 插件针对这个项目禁用即可,禁用后需要重启编辑器才能生效
pnpm i pinia
pnpm i @pinia/nuxt
pnpm i nuxt-icons
随便放一个svg 图片进去
后面的 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
需要重启编辑器
pnpm eslint --fix ./**/*.vue ./**/*.ts
?这个时候直接运行,会有一个错误
?我们需要去掉 package.json的这一句话,就行了
把 common.scss 配置在 nuxt.config.ts 中,这样所有文件都可以用里面的全局样式了
发现一个问题,刚才没注意,配置文件里面有个ts 错误
解决办法,增加一句 导入的语句即可,别忘了提交代码
pnpm i ant-design-vue
到此为止,项目需要用到的基本框架都搭建完成了,这一部分内容对应的就是 vite 项目的第一篇文章的内容,大同小异。接下来参照 第二篇文章?完成封装请求和多语言等逻辑。
对于请求的封装,和 vite 项目内容基本一致,所以不做太过细致的介绍。可以把 vite 项目的文件都复制过来,缺啥补啥就行了。想看具体实现步骤,去这里
pnpm i axios
新建 service 文件夹,然后从这个项目复制同名文件到 service文件夹下
公共方法这一部分的详细讲解在这里。
pnpm i js-cookie
pnpm i callapp-lib
新建 global 文件夹,然后从这个项目复制同名文件到 global 文件夹下,不用复制 i18n 文件夹,因为 nuxt 项目和 vite 项目的多语言有点区别。
这部分其实有一个 bug,因为 nuxt 是服务端渲染的,所以有些问题需要调整,在第八节部署的部分有具体问题和解决方案。
pnpm i vue-i18n
这一步会导致一个 bug,项目运行不起来,别着急,在下面第七节有解决办法
npm i @nuxtjs/i18n -D
在根目录下新建 plugins 文件夹,下面新建以下几个文件
运行 npm run dev 报了一个错误
研究半天发现是? @nuxtjs/i18n 的版本不兼容
重新安装?@nuxtjs/i18n 高版本
pnpm i @nuxtjs/i18n@8.0.0-beta.10 -D
这回可以正常运行了,提交修复的代码
看是否可以正常打包,发现可以正常打包。
很遗憾,这一步报错了
全局搜索 location ,发现?env.ts 中有用到,所以我们需要改一下,服务端是没有浏览器对象的。关于在 nuxt 项目中区分环境,我的这篇文章有详细的介绍,可以看一下。
这回可以正常预览了。
项目的完整的流程如下,现在可以将项目推送到远端 gitee 仓库了。
你可以使用 vercel部署,但是需要新建一个github仓库,但是其实部署了也没啥用,我这里就不部署了,想要部署的可以参考这篇文章的第八小节
整篇文章结束,一个完整的 nuxt3 + vue + ts 项目搭建完成,已经可以正常使用了。以后如果你想要一个服务端渲染的项目,直接克隆这个项目就可以使用,非常方便,但是别忘了改名字!!
再次声明,这篇文章是在我的专栏《前端工程化系统教程》中的 vite + ts +vue3 教程基础上实现的,尤其是请求封装的部分,在第三篇有详细的介绍,如果有不懂的可以先看一下,也可以在评论区尽情评论!
内容比较多,难免有疏漏,有不对的地方欢迎大家指出!
项目地址是