重生之我在掘金做毕设【一】:技术选型

引言

大家好啊,我是前端拿破轮,川内唯二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-workspacetruborepo

搭建项目结构

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前端开发。在本专栏后续文章更新。

好了,这篇文章就到这里啦,如果对您有所帮助,欢迎点赞,收藏,分享👍👍👍。您的认可是我更新的最大动力。由于笔者水平有限,难免有疏漏不足之处,欢迎各位大佬评论区指正。

往期推荐✨✨✨

我是前端拿破轮,关注我,和您分享前端知识,我们下期见!

相关推荐
崔庆才丨静觅8 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60619 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了9 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅9 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅9 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅10 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment10 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅10 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊10 小时前
jwt介绍
前端
爱敲代码的小鱼10 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax