## 安装 - 1.安装pnpm ```shell npm install -g pnpm ``` - 2.安装依赖 ```shell pnpm i ``` ## 运行 - 1.开发环境启动 ```shell pnpm dev ``` ## 打包 ```shell pnpm build ``` ## 提交代码前先格式代码 ```shell pnpm lint ``` ## 目录结构 ``` ├── .vscode # IDE 工具推荐配置文件 │ │ ├── extensions.json # 一键安装 vscode 插件 │ │ ├── settings.json # 设置扩展程序或 vscode 编辑器的一些属性 │ │ ├── vue3.0.code-snippets # vue3.0 代码片段 │ │ └── vue3.2.code-snippets # vue3.2 代码片段 │ │ └── vue3.3.code-snippets # vue3.3 代码片段 ├── build # 构建工具 │ │ ├── cdn.ts # 打包时采用 cdn 模式 │ │ ├── compress.ts # 打包时启用 gzip 压缩或 brotli 压缩 │ │ ├── info.ts # 输出打包信息(大小、用时) │ │ ├── optimize.ts # vite 依赖预构建配置项 │ │ ├── plugins.ts # vite 相关插件存放处 │ │ ├── utils.ts # 构建工具常用方法抽离 ├── locales # 国际化文件存放处 │ │ ├── en.yaml # 英文配置 │ │ ├── zh-CN.yaml # 中文配置 ├── node_modules # 模块依赖 ├── public # 静态资源 │ │ ├── audio # 音频文件 │ │ ├── html # 静态 iframe 页面 │ │ ├── wasm # wasm 文件以及胶水代码 │ │ ├── favicon.ico # favicon │ │ ├── logo.svg # logo │ │ ├── platform-config.json # 全局配置文件(打包后修改也可生效) ├── src │ ├── api # 接口请求统一管理 │ ├── assets # 字体、图片等静态资源 │ ├── components # 自定义通用组件 │ │ ├── ReAnimateSelector # [animate.css](https://animate.style/) 选择器组件 │ │ ├── ReAuth # 按钮级别权限组件 │ │ ├── ReCol # 封装 element-plus 的 el-col 组件 │ │ ├── ReCountTo # 数字动画组件 │ │ ├── ReCropper # 图片裁剪组件 │ │ ├── ReDialog # 基于 element-plus 中 el-dialog 组件开发的函数式弹框 │ │ ├── ReIcon # 图标组件 │ │ ├── ReImageVerify # 图形验证码组件 │ │ ├── RePureTableBar # 配合 `@pureadmin/table` 实现快速便捷的表格操作 https://github.com/pure-admin/pure-admin-table */ │ │ ├── ReSegmented # 分段控制器组件 │ │ ├── ReText # 支持 Tooltip 提示的文本省略组件 │ │ ├── ReTypeit # 打字机效果组件 │ ├── config # 获取平台动态全局配置 │ ├── directives # 自定义指令 │ │ ├── auth # 按钮级别权限指令 │ │ ├── copy # 文本复制指令(默认双击复制) │ │ ├── longpress # 长按指令 │ │ ├── optimize # 防抖、节流指令 │ ├── layout # 主要页面布局 │ ├── plugins # 处理一些库或插件,导出更方便的 api │ ├── router # 路由配置 │ ├── store # pinia 状态管理 │ ├── style # 全局样式 │ │ ├── dark.scss # 暗黑模式样式适配文件 │ │ ├── element-plus.scss # 全局覆盖 element-plus 样式文件 │ │ ├── reset.scss # 全局重置样式文件 │ │ ├── sidebar.scss # layout 布局样式文件 │ │ ├── tailwind.css # tailwindcss 自定义样式配置文件 │ │ ├── ... │ ├── utils # 全局工具方法 │ │ ├── http # 封装 axios 文件 │ │ ├── localforage # 二次封装 localforage (https://localforage.docschina.org/) 支持设置过期时间,提供完整的类型提示 │ │ ├── progress # 封装 nprogress │ │ └── auth.ts # 处理用户信息和 token 相关 │ │ └── chinaArea.ts # 汉字转区域码 │ │ └── globalPolyfills.ts # 解决项目可能因为安装某个依赖出现 `global is not defined` 报错 │ │ └── message.ts # 消息提示函数 │ │ ├── mitt.ts # 触发公共事件,类似 EventBus │ │ ├── preventDefault.ts # 阻止键盘F12、浏览器默认右键菜单、页面元素选中、图片默认可拖动的方法 │ │ ├── print.ts # 打印函数 │ │ ├── propTypes.ts # 二次封装 vue 的 propTypes │ │ ├── responsive.ts # 全局响应式 storage 配置 │ │ ├── sso.ts # 前端单点登录逻辑处理 │ │ ├── tree.ts # 树结构相关处理函数 │ ├── views # 存放编写业务代码页面 │ ├── App.vue # 入口页面 │ ├── main.ts # 入口文件 ├── types # 全局 TS 类型配置 │ │ ├── global-components.d.ts # 自定义全局组件获得 Volar 提示(自定义的全局组件需要在这里声明下才能获得 Volar 类型提示哦) │ │ ├── global.d.ts # 全局类型声明,无需引入直接在 `.vue` 、`.ts` 、`.tsx` 文件使用即可获得类型提示 │ │ ├── index.d.ts # 此文件跟同级目录的 global.d.ts 文件一样也是全局类型声明,只不过这里存放一些零散的全局类型,无需引入直接在 .vue 、.ts 、.tsx 文件使用即可获得类型提示 │ │ ├── router.d.ts # 全局路由类型声明 │ │ ├── shims-tsx.d.ts # 该文件是为了给 .tsx 文件提供类型支持,在编写时能正确识别语法 │ │ └── shims-vue.d.ts # .vue、.scss 文件不是常规的文件类型,typescript 无法识别,所以我们需要通过下图的代码告诉 typescript 这些文件的类型,防止类型报错 ├── .browserslistrc # 配置目标浏览器的环境 ├── .dockerignore # 排除不需要上传到 docker 服务端的文件或目录 ├── .editorconfig # 编辑器读取文件格式及样式定义配置 https://editorconfig.org/ ├── .env # 全局环境变量配置(当 .env 文件与 .env.development、.env.production、.env.staging 这三个文件之一存在相同的配置 key 时,.env 优先级更低) ├── .env.development # 开发环境变量配置 ├── .env.production # 生产环境变量配置 ├── .env.staging # 预发布环境变量配置 ├── .eslintignore # eslint 语法检查忽略文件 ├── .gitattributes # 自定义指定文件属性 ├── .gitignore # git 提交忽略文件 ├── .gitpod.yml # gitpod 部署配置 ├── .lintstagedrc # lint-staged 配置 ├── .markdownlint.json # markdown 格式检查配置 ├── .npmrc # npm 配置文件 ├── .nvmrc # 用于指定在使用 Node Version Manager(NVM)时要使用的特定 Node.js 版本 ├── .prettierignore # prettier 语法检查忽略文件 ├── .prettierrc.js # prettier 插件配置 ├── .stylelintignore # stylelint 语法检查忽略文件 ├── commitlint.config.js # git 提交前检查配置 ├── Dockerfile # 用来构建 docker 镜像 ├── eslint.config.js # eslint 语法检查配置 ├── index.html # html 主入口 ├── LICENSE # 证书 ├── package.json # 依赖包管理以及命令配置 ├── pnpm-lock.yaml # 依赖包版本锁定文件 ├── postcss.config.js # postcss 插件配置 ├── README.md # README ├── stylelint.config.js # stylelint 配置 ├── tailwind.config.ts # tailwindcss 配置 ├── tsconfig.json # typescript 配置 └── vite.config.ts # vite 配置 ``` ## 程序员必备技能之 `Git` ### 常用命令 #### 拉取代码 ```sh git clone xxx.git ``` #### 创建分支 ```sh git branch dev # or git checkout -b dev # or git switch -c dev ``` #### 切换本地分支 ```sh git checkout dev # or git switch dev ``` #### 切换分支并关联远程分支 ```sh git checkout -b dev origin/dev # or git checkout --track origin/dev ``` #### 查看本地所有分支 ```sh git branch ``` #### 查看远程所有分支 ```sh git branch -r ``` #### 删除本地分支 ```sh git branch -d dev ``` #### 删除远程分支 ```sh git push origin -d dev ``` #### 将代码从工作区添加暂存区 ```sh git add . ``` #### 查看尚未暂存的更新 ```sh git diff ``` #### 添加提交信息(`commit` 注释写错,执行 `git commit --amend` 此时会进入默认 `vim` 编辑器,修改注释后保存) ```sh git commit -m 'xxxx' ``` #### 推送代码到远程分支 ```sh git push origin dev # 强制推送(常在 git rebase 或 git reset 后使用) git push -f origin dev ``` #### 拉取远程分支代码 ```sh git pull origin dev ``` #### 合并分支 ```sh git merge dev ``` #### 查看 `git` 状态 ```sh git status ``` #### 查看提交历史 ```sh git log ``` #### 查看可引用的历史版本记录 ```sh git reflog ``` #### 把本地未 `push` 的分叉提交历史整理成直线 ```sh git rebase origin/dev ``` #### 回到 `rebase` 执行之前的状态 ```sh git rebase --abort ``` #### 回退版本 ```sh # 回退指定 commit_id 版本 git reset --hard commit_id # 回退上一个版本 git reset --soft HEAD^ # or git reset --soft HEAD~1 ``` #### 撤销代码 ```sh git revert commit_id ``` #### 修改分支名 ```sh # 第一步 git branch -m oldBranchName newBranchName # 第二步 git push origin :oldBranchName # 第三步 git push --set-upstream origin newBranchName ``` #### 查看 `git` 配置 ```sh # 查看全局配置 git config --global --list # 查看用户名 git config --global user.name ``` #### 添加用户名 ```sh git config --global --add user.name newName ``` #### 删除用户名 ```sh git config --global --unset user.name ``` #### 修改用户名 ```sh git config --global user.name newName ``` #### 配置 `Git` 用户名和邮箱 ```sh # 用户名 git config --global user.name "Your Name" # 邮箱 git config --global user.email "email@example.com" ``` #### 统计代码行数 ```sh git ls-files | xargs wc -l ``` #### 文件或文件夹重命名 `Git` 在 `Windows` 和 `macOS` 的默认文件系统中对文件大小写修改是不敏感的。可能你会先删除文件并提交,然后再新建文件再提交,这样做很麻烦,下面的 `git mv` 就简化了繁琐的操作 比如文件 `filename.ts` 或文件夹 `jsutils`,它们的相对路径分别是 `src/filename.ts` 和 `src/jsutils` ```sh # 将 filename.ts 文件重命名为 fileName.ts,分下面两步 # 第一步(注意下面的 name.ts 与 filename.ts 是不同的,如果你把 name.ts 改为 fileName.ts 是不行的,因为上面讲了仅大小写不同是不行的) git mv src/filename.ts src/name.ts # 第二步 git mv src/name.ts src/fileName.ts # 将 jsutils 文件夹重命名为 jsUtils,分下面两步 # 第一步 git mv src/jsutils src/utils # 第二步 git mv src/utils src/jsUtils ``` ## 提交规范 [相关参考](https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-changelog-angular) `feat: 增加新功能` `fix: 修复问题/BUG` `style: 代码风格相关无影响运行结果的` `perf: 优化/性能提升` `refactor: 重构` `revert: 撤销修改` `test: 测试相关` `docs: 文档/注释` `chore: 依赖更新/脚手架配置修改等` `workflow: 工作流改进` `ci: 持续集成` `types: 类型定义文件更改` `wip: 开发中` ## `CodeReview` 常用缩写 `PR`(Pull Request)拉取请求,给其他项目提交代码 `LGTM`(Looks Good To Me)代码已经过 review,可以合并 `SGTM`(Sounds Good To Me)和上面那句意思差不多,也是已经通过了 review 的意思 `WIP`(Work In Progress)如果有个改动很大的 PR,可以在写了一部分的情况下先提交,但需在标题写上 WIP,以告诉项目维护者这个功能还未完成,方便维护者提前 review 部分提交的代码 `PTAL`(Please Take A Look)提示别人来看一下 `TBR`(To Be Reviewed)提示维护者进行 review `TL;DR`(Too Long; Didn't Read)太长懒得看 `TBD`(To Be Done(or Defined/Discussed/Decided/Determined)) 一般表示还没搞定 [简单易懂的 Git](https://www.bilibili.com/video/BV1KZ4y1o7gr/?p=1&vd_source=5a992808de6229d78e7810536c5f9ab3)