引言
大家好啊,我是前端拿破轮,川内唯二985在读,目前鹅厂前端实习,最近准备开始毕业设计了。拿破轮,川内唯二985在读,目前鹅厂前端实习,最近准备开始毕业设计了。
基于物联网工程专业的特性,需要选择一个软硬件结合的项目作为毕业设计,当然根据我的职业规划,该项目主要还是偏向Web前端。
经过调研分析,选择了《学习岛------无人自习室O2O平台设计及商业化分析》。之所以还有商业运行分析是因为拿破轮读的是交叉复合培养的双学位,毕设中需要体现金融学的内容。
接下来我会更新一个系列,记录完整的毕设开发过程,并将项目代码全部开源,欢迎各位大佬不吝赐教。
仓库地址:github.com/majialu-lov...
声明:本项目代码全部开源,但仅供学习交流使用,请注意学术规范,一旦发现抄袭,剽窃等行为,将追究法律责任。
本文先进行软件的技术选型,经过技术调研和分析,初步确定如下:
项目架构
由于整个项目由拿破轮自己独立设计,全栈开发。而且是整个项目统一使用TS语言,所以决定使用Monorepo的方式来管理项目的前端,后端,移动端,工具组件库和UI库。
前端主要使用React
全家桶,包括React
,ReactDOM
,RectRouter
,Redux
,以及抖音的UI组件库Semi Design.
后端主要使用Nest.js
。
移动端主要使用React Native
。
整个项目配置eslint
,prettier
,stylelint
,commitlint
,commitizen
,husky
,来规范TS代码,格式,样式,提交规范。
Monorepo
管理工具使用pnpm-workspace
和truborepo
。
搭建项目结构
1. 创建文件夹
bash
# 创建目录
mkdir study-island
# 进入目录
cd study-island
# 初始化
pnpm init
2. 创建pnpm-workspace
bash
# 创建pnpm-workspace配置文件
touch pnpm-workspace.yaml
在其中写入以下内容:
yaml
packages:
- 'packages/*'
- 'apps/*'
这个文件的意思就是表明整个项目使用Monorepo
方式进行管理,一个项目中会有多个子包。子包存在于packages/*
和apps/*
目录下。apps
用于存放应用程序,即业务代码。而packages
则用于存放工具包和UI组件库等与业务解耦的代码。
3. 创建子包文件夹
然后就可以创建对应的文件夹了。
bash
mkdir apps packages
4. 创建前端项目
进入apps文件夹,使用vite
创建一个React+TypeScript+SWC
的项目。
bash
cd apps
pnpm create vite@latest
项目名称取为web
意味着这是PC端管理后台。

然后按照命令行的提示进入目录启动运行。
bash
cd web
pnpm i
pnpm dev

项目成功启动,Web前端暂时做到这里。
5. 创建后端项目
后端项目使用Nest.js
来进行开发。
首先回到apps
目录。
bash
cd ..
然后按照Nestjs官网的步骤进行创建项目
bash
# 全局安装nest/cli的脚手架,帮助我们快速搭建一个项目
pnpm add -g @nestjs/cli
# 使用脚手架创建一个新项目,取名为backend
nest new backend
包管理工具选用pnpm
按照提示确定即可。

按照提示进入后端项目并启动。
bash
cd backend
pnpm start
进入backend/src/main.ts
,我们发现后端项目运行在3000
端口,所以使用浏览器访问http://localhost:3000
来验证服务器是否启动成功。

观察发现项目成功启动,后端暂时结束。
6. 创建移动端项目
移动端我们使用React Native
进行跨平台开发。按照React Native官网的文档来初始化一个RN
项目。
还是先返回apps
目录。
bash
cd ..
官方推荐基于Expo
框架来创建RN
项目。
bash
pnpm dlx create-expo-app@latest
项目名称取为mobile
,表示移动端。
bash
# 进入项目
cd mobile
# 安装依赖
pnpm i
# 启动项目,windows电脑只能启动android
pnpm ios

移动端处理暂时结束。
7. 整合项目结构,使其符合Monorepo架构
由于我们使用脚手架搭建的项目默认任务我们是单仓库管理的,所以有一些会给我们初始化git
仓库,这是不适合我们的。因为我们采用统一的根目录git仓库。所以需要把子包中多余的仓库删除。

在根目录新建.gitignore
文件,把node_modules
先写进去。
bash
# 确保当前处在根目录study-island下面
touch .gitignore
echo "node_modules" >> .gitignore
8. 配置commitlint和commitizen以及husky
具体配置细节可以参考拿破轮之前的文章🚀🚀🚀实在受不了混乱的提交------我使用了commitlint和commitizen
不过有一一点要注意,在pnpm
管理的Monorepo
架构中,如果要在根目录安装包必须使用-w
参数。
bash
# 安装@commitlint/cli @commitlint/config-conventional
pnpm add -D @commitlint/cli @commitlint/config-conventional -w
创建commitlint.config.mjs
文件
bash
touch commitlint.config.mjs
写入以下内容:
js
// commitlint.config.mjs
export default {
extends: ['@commitlint/config-conventional'],
};
安装husky
bash
pnpm add -D husky -w
在根目录创建.husky
目录,并在该目录下创建commit-msg
文件,写入以下内容。
bash
pnpm dlx commitlint --edit $1
安装commitizen
bash
pnpm add -D commitizen -w
安装规范依赖
bash
pnpm add -D -w cz-conventional-changelog
配置commitizen
,在根目录package.json
中添加
json
"scripts": {
...,
"commit": "git-cz"
}
// 根目录package.json
"config": {
"commitizen": {
"path": "cz-conventional-changelog"
}
}
9. 安装turbo
bash
pnpm add turbo --save-dev --workspace-root
详情可参考turbo官网
创建turbo.json
文件
json
// turbo.json
{
"$schema": "https://turborepo.com/schema.json",
"tasks": {
"build": {
"outputs": ["dist/**"]
},
"check-types": {
"dependsOn": ["^check-types"]
},
"dev": {
"persistent": true,
"cache": false
}
}
}
这个文件中配置的task在我们运行turbo xxx
时就会执行各个子包中对应的xxx
脚本。
将.turbo
加入到.gitignore
文件中。
在根目录的package.json
中配置脚本
json
"scripts": {
"commit": "git-cz",
"lint": "turbo lint"
},
尝试运行trubo lint:
bash
pnpm lint
由于web
,backend
,mobile
子包的package.json
中都有lint
的脚本,所以turbo lint
会执行每个子包中的脚本。

10. 初始化git仓库,利用命令行交互式提交
bash
git init
git add .
pnpm commit
提交类型为feat
,信息是初始化。

将项目发布到githbu,发布为public
仓库。
总结
本篇完成技术选型和项目搭建,后续会优先进行Web前端开发。在本专栏后续文章更新。
好了,这篇文章就到这里啦,如果对您有所帮助,欢迎点赞,收藏,分享👍👍👍。您的认可是我更新的最大动力。由于笔者水平有限,难免有疏漏不足之处,欢迎各位大佬评论区指正。
往期推荐✨✨✨
我是前端拿破轮,关注我,和您分享前端知识,我们下期见!