开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第3天,点击查看活动详情
一、准备阶段
01、初始化next.js环境
使用Next.js初始化项目及工程配置
-
创建项目:(后面跟两个点表示已经创建好文件目录,这里选择创建一个新目录,选择创建TS项目)
npx create-next-app@latest --typescript my_blog -
启动项目:
npm run dev or yarn dev -
默认访问地址
http://localhost:3000 -
了解更多可参照Next.js中文官网
配置VSCode + ESLint + StyleLint + Prettier 工程环境
-
ESLint:**主要用于代码校验,能避免开发按阶段发现很多潜在的问题
-
VSCode安装Eslint插件 -
安装依赖
yarn add eslint -D -
配置文件--
.eslintc.json{ "extends": [ // eslint 自带拓展校验 "next/core-web-vitals", // 官方推荐校验 "eslint:recommended" ] }
-
-
StyleLint:主要用于对
CSS样式进行代码格式化-
VSCode安装Stylelint插件 -
安装依赖
yarn add stylelint stylelint-config-standard -D -
配置文件--
.stylelintrc.json{ "extends":"stylelint-config-standard-scss" } -
配置
vscode实现自动修复-
设置 --> 搜索 editor Code Action On Save -->
settings.json-->--settings.json "editor.codeActionsOnSave": { "source.fixAll.eslint": true },
-
-
-
Prettier:主要用于代码格式化,可以让代码风格趋于统一,方便后续维护迭代
-
VSCode安装prettier插件 -
配置文件--
.prttierrc.json//常用配置项 { "arrowParens": "always", "bracketSpacing": true, "endOfLine": "lf", "htmlWhitespaceSensitivity": "css", "insertPragma": false, "jsxBracketSameLine": false, "jsxSingleQuote": false, "printWidth": 80, "proseWrap": "preserve", "quoteProps": "as-needed", "requirePragma": false, "semi": true, "singleQuote": true, "tabWidth": 2, "trailingComma": "es5", "useTabs": false, "vueIndentScriptAndStyle": false, "parser": "babel" } -
配置
vscode-
设置 --> 搜索Editor Format On Save --> 勾选
Format On Save
Enable Preview
-
-
02、搭建Mock Server
在真实的工作场景中,前后端工作基本都是并行的,一般都是相互约定号接口API后,分别进入开发,需要根据接口API自信模拟Mock数据,方便我们进行页面开发。
Mock数据常见三种方式
-
直接写死,使用
setTimeout模拟接口延时- 简单,但是藏代码比较多
-
本地起一个Node服务,配合
mock.js生产假数据,自己实现接口API- 灵活,工作量较大
-
使用已经搭建好的在线Mock服务,比如Postman、
EsatMoock、Apifox等- 快速,比较接近实际开发场景,但是配置数据不是很灵活
- 值得一提的是Apifox作为一款新的产品,其作为集API 文档、API 调试、API Mock、API 自动化测试与一体的自动化平台,值得去了解并学习如何使用。
使用Next.js结合第二种方式(即使用node)
理由:其内部已经内置了提供API服务的能力,所以使用mock.js来产生Mock数据,无需搭建Node服务
Mock.js使用
- 教程传送门
- 安装
//mock依赖
yarn add mockjs
//当项目 为TS项目是需要安装开发依赖
yarn add @types/mockjs -D
二、相关模块
01、导航栏
- 了解路由
-
清除默认代码:清除创建项目自带的样式,默认html、logo等
-
配置alias
Alias的作用是能够快速阴图不同路径的代码文件,避免反复的写相对路径,提高开发效率,不用以“../../”的形式去查找
- 参考
-
// tsconfig.json or jsconfig.json { "compilerOptions": { "baseUrl": "." } } - 重启项目
-
组件库的引入
使用Next.jsAPI路由开发登录注册模式
编辑
-
登录弹窗封装(或者登录页面)
-
登录验证码接入平台(可以免费体验、用来测试够用了)
时间戳转换依赖
yarn add date-fnsmd5加密依赖yarn add md5 yarn add @types/md5 -Dbase64依赖yarn add js-base64 -
设置服务端
-
安装
mysql数据库 -
安装数据管理依赖npm地址
npm install typeorm --save npm install reflect-metadata --save npm install mysql2 --save -
配置可以支持装饰器
//tsconfig.json
compilerOptions选项中添加
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
//bable的配置
npm add
@babel/core
@babel/plugin-proposal-decorators
@babel/plugin-proposal-class-properties
babel-plugin-transform-typescript-metadata -D
.abbelrc
{
"presets": [
"next/babel"
],
"plugins": [
"babel-plugin-transform-typescript-metadata",
[
"@babel/plugin-proposal-decorators",
{
"legacy": true
}
],
"@babel/plugin-proposal-class-properties"
]
}
- 验证码自动登录功能实现
mobx全局状态管理
安装
npm add mobx-react-lite
npm add mobx
使用cookie实现全局登录
-
安装next-cookie
npm add next-cookie -
设置cookie,保证刷新页面登录信息不丢失
-
退出登录
说明:依赖安装后如何使用可以直接再npm 官网搜索对应的依赖查看使用说明
使用第三方登录
- github登录
- GitHub OAuth 第三方登录示例教程
- 忽略ssL验证
-
const result = await axios.post( `https://${url}/login`, body, { httpsAgent: new https.Agent({ rejectUnauthorized: false }) } )
实现写文章
- 安装依赖
- react-editor-md
- 文章存入数据库
- 页面跳转
SSR渲染文章列表
文章详情
-
依赖:markdown-to-txt
npm add markdown-to-txt npm add markdown-to-jsx -
图片解析
-
// next.config.js const nextConfig = { images: { images: { domains: ['assets.acme.com'], }, }, } -
编辑文章
-
文章添加评论
-
添加评论更新页面
部署与上线
线上免费数据库
需要填写问卷调查,可能是个人的信息不符合或者填写有问题,试过多次,还是不让建数据库,可能是方式没找对 我的评价是:创建失败、体验不好(因人而异,感兴趣可自行尝试)
......
部署项目没有服务器?使用vercel.com/
我的感觉是:由于是国外的网站,所以不是很稳定,如果需要寻找免费的网站来部署项目,不妨去各大云服务厂商领取免费的服务器来玩玩,体验时间结束后再考虑要不要去购买自己服务器、域名等。
总结
收获:
- next.js的基本使用
- 代码书写环境配置,帮助规范开发
- TypeScript、React的一些运用
- Mock Server模拟数据
- 创建数据库、连接数据库、基于node简单操作数据库
- 基于next、node结合MySQL的短信验证
- 部署项目知识
痛点:
- 文档的阅读与吸收能力需要提高,通过文档不能和好的理解作者思想,导致在实际运用时频频出现问题
- TypeScript、React还需深入学习,否侧要花大量的时间去解决各种报错
- 项目打包,与之对应的时webpack、babel相关知识的欠缺