1 Star 0 Fork 0

Yolo / project

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

硅谷甄选运营平台项目实现过程记录

一、项目初始化

1.1 初始化项目

使用 vite 构建项目: npm create vite

1.2 代码规范:

1、使用 eslint + stylelint + prettier 来对代码质量检测和修复
2、使用 husky 来做 commit 拦截
3、使用 commitlint 来统一提交规范
4、使用 preinstall 来统一包管理工具(暂时没有配置)

二、项目配置

2.1 配置eslint(语法检查工具)

(1) 安装 npm install -D eslint
(2) 生成配置文件(初始化配置) npx eslint --init

2.1.1 vue3环境代码校验插件

npm install -D eslint-plugin-import eslint-plugin-vue eslint-plugin-node eslint-plugin-prettier eslint-config-prettier @babel/eslint-parser

说明:
    让所有与 prettier 规则存在冲突的 eslint规则失效,并使用 prettier 进行代码检查 eslint-plugin-import、 eslint-config-prettier、 eslint-plugin-node
    允许使用 eslint 校验所有的 babel code:@babel/eslint-parser

2.1.2 修改 .eslintrc.cjs 配置文件

2.1.3 .eslintignore忽略文件配置

dist
node_modules

2.1.4 运行脚本

"script": {
    "lint": "eslint src",   // 检查
    "fix": "eslint src --fix",  // 修复
}

2.2 配置prettier(格式化工具)

安装 npm install -D eslint-plugin-prettier prettier eslint-config-prettier

2.2.2 添加 .prettierrc.json 配置规则

{
    "singleQuote": false,   // 字符串使用单引号
    "semi": false,  // 代码行是否以分号结束
    "bracketSpacing": true,
    "htmlWhitespaceSensitivity": "ignore",
    "endOfLine": "auto",
    "trailingComma": "all",
    "tabWidth": 2   // tab 缩进
}

2.2.3 .prettierignore 忽略文件配置

/dist/*
/html/*
.local
/node_modules/**
**/*.svg
**/*.sh
/public/*

2.3 配置 styleLint

npm add sass sass-loader stylelint postcss postcss-scss postcss-html stylelint-config-prettier stylelint-config-recess-order stylelint-config-recommended-scss stylelint-config-standard stylelint-config-standard-vue stylelint-scss stylelint-order stylelint-config-standard-scss -D
安装依赖时出现依赖冲突,添加 --force 参数 尝试强制解决依赖关系

2.3.2 添加 .stylelintrc.cjs 配置文件

module.exports = {
  extends: [
    'stylelint-config-standard', // 配置 stylelint 拓展插件
    'stylelint-config-html/vue', // 配置 vue 中 template 样式格式化
    'stylelint-config-standard-scss', // 配置 stylelint css插件
    'stylelint-config-recommended-vue/scss', // 配置 vue 中 scss 样式格式化
    'stylelint-config-recess-order', // 配置 stylelint css 属性书写顺序插件
    'stylelint-config-prettier', // 配置 stylelint 和 prettier 兼容
  ],
  overrides: [
    {
      files: ['**/*.(scss|css|vue|html)'],
      customSyntax: 'postcss-scss',
    },
    {
      files: ['**/*.(html|vue)'],
      customSyntax: 'postcss-html',
    },
  ],
  ignoreFiles: [
    '**/*.js',
    '**/*.jsx',
    '**/*.ts',
    '**/*.tsx',
    '**/*.json',
    '**/*.md',
    '**/*.yaml',
  ],
  /**
   * null     =>      关闭该规则
   * always   =>      必须
   * */
  rules: {
    'value-keyword-case': null, // 在 css 中使用 v-bind 不报错
    'no-descending-specificity': null, // 禁止在具有较高优先级的选择器后出现被其覆盖的
    'function-url-quotes': 'always', // 要求URL的必须加上引号
    'no-empty-source': null, // 关闭禁止空源码
    'selector-class-pattern': null, // 关闭强制选择器类名的格式
    'property-no-unknown': null, // 禁止未知的属性(true 为不允许)
    'block-opening-brace-space-before': 'always', // 大括号前必须有一个空格或不能有
    'value-no-vendor-prefix': null, // 关闭 属性前缀 -webkit-box
    'property-no-vendor-prefix': null, // 关闭 属性前缀 -webkit-mask
    'selector-pseudo-class-no-unknown': [
      // 不允许未知的选择器
      true,
      {
        ignorePseudoClasses: ['global', 'v-deep', 'deep'], // 忽略属性,修改element
      },
    ],
  },
}

2.3.3 .stylelintignore 忽略文件配置

/node_modules/*
/dist/*
/html/*
/public/*

2.3.4 运行脚本

"script": {
    "format": "prettier --write \"./**/*.{html,vue,ts,js,json,md}\"",  // 格式化代码命令行
    "lint:eslint": "eslint src/**/*.{ts,vue} --cache --fix",
    "lint-style": "stylelint src/**/*.{css,scss,vue} --cache --fix"
}

2.4 配置 husky(强制按照规范格式提交代码)

安装:npm install -D husky
初始化: npx husky-init
在生成的.husky/pre-commit 文件 配置提交代码的前置钩子:npm run format

2.5 配置 commitLint

安装:npm add @commitlint/config-conventional @commitlint/cli -D

2.5.1 添加配置文件 commitlint.config.cjs

module.exports = {
  extends: ['@commitlint/config-conventional'],
  // 校验规则
  rules: {
    'type-enum': [
      2,
      'always',
      [
        'feat', // 新特性、新功能
        'fix', // 修改bug
        'docs', // 文档修改
        'style', // 代码格式修改,注意不是css修改
        'refactor', // 代码重构
        'perf', // 优化相关,比如性能提升、体验
        'test', // 测试用例修改
        'chore', // 其他修改,比如改变构建流程、或者增加依赖库、工具等
        'revert', // 回滚版本
        'build', // 编译相关的修改,比如发布版本、对项目构建或以来的改动
      ],
    ],
    'type-case': [0],
    'type-empty': [0],
    'scope-empty': [0],
    'scope-case': [0],
    'subject-full-stop': [0, 'never'],
    'subject-case': [0, 'never'],
    'header-max-length': [0, 'always', 72],
  },
}

2.5.2 添加运行脚本

"script": {
    "commitlint": "commitlint --config commitlint.config.cjs -e -V"
}

2.5.3 配置 husky

npx husky add .husky/commit-msg

在生成的commit-msg文件配置 npm run commitlint

注意:提交代码的命令格式:git commit -m 'fix: xxx'

必须是英文冒号,且冒号后面有一个空格

三、项目集成

3.1 element-plus 集成

安装:npm install element-plus --save

安装图标组件库:npm install @element-plus/icons-vue

参考 element-plus 官网配置组件的自动导入(官网推荐用法)【如果你对打包后的文件大小不是很在乎,那么使用完整导入会更方便】

3.2 src文件夹别名配置

1、vite.config.ts 添加配置代码
    resolve: {
        alias: {
            "@": path.resolve('./src')  // 相对路径配置别名 用 @ 代替 src
        }
    }

2、tsconfig.json 添加配置代码
    "compilerOptions": {
        "baseUrl": "./",
        "paths": {
            "@/*": ["src/*"]
        }
    }

3.3 项目环境变量的配置

1、分别配置开发、测试、生产环境的文件!
    .env.test
    .env.development
    .env.production

2、在 package.json 文件中修改打包脚本
    "build:test": "vue-tsc && vite build --mode test",
    "build:prod": "vue-tsc && vite build --mode production"

3.4 SVG图标配置

1、安装依赖插件:npm install vite-plugin-svg-icons -D

2、在 vite.config.ts 配置插件
    createSvgIconsPlugin({
        // process.cwd() 是 Node.js 的一个内置方法,用于获取当前工作目录的路径。
        iconDirs: [path.resolve(process.cwd(), 'src/assets/icons')],
        symbolId: 'icon-[dir]-[name]'
    })

3、封装 svg-icon 组件并注册为全局组件

3.5 自定义插件用于注册全局组件

注意:需要在入口文件安装插件

3.6 集成 scss

添加全局样式
 1、清除默认样式 (reset.scss)
 2、配置全局变量 (variable.scss)
    在 vite.config.ts 文件进行配置
        css: {
            preprocessorOptions: {
                // 配置 scss 全局变量
                scss: {
                    javascriptEnabled: true,
                    additionalData: '@import "./src/styles/variable.scss";'
                }
            }
        }

3.7 mock 数据

1、安装:npm install vite-plugin-mock mockjs -D
2、具体配置参考:https://github.com/vbenjs/vite-plugin-mock

3.8 axios 二次封装

1、安装:npm install axios
2、实现二次封装并对外暴露

3.9 API接口的统一管理

3.10 模块的路由配置

1、安装路由管理插件:npm install vue-router
2、实现路由配置并对外暴露,然后挂载到应用上

3.11 pinia数据存储仓库

安装:npm install pinia

将网络请求写在 Pinia 的 actions 中通常是更好的选择,因为这样可以将数据逻辑和状态管理逻辑分离开来,使代码更加模块化和可维护。
将网络请求放在组件内部可能会导致以下问题:
    1、重复代码:如果多个组件需要进行相同的网络请求,将其放在组件内部会导致代码重复。而将网络请求封装在 Pinia 的 actions 中,可以在多个组件中共享和复用。
    2、代码耦合:将网络请求放在组件内部会导致组件与网络请求逻辑紧密耦合在一起,导致代码难以理解和维护。而将网络请求放在 Pinia 的 actions 中,可以使组件更专注于渲染和交互逻辑,而不必关心网络请求的具体实现。
    3、单一职责原则:组件应该专注于 UI 的展示和用户交互,而不是处理数据逻辑。将网络请求放在 Pinia 的 actions 中可以遵循单一职责原则,使代码更加清晰和可读。

四、遇到的问题

4.1 左侧菜单导航栏

4.1.1 菜单折叠

1、Bug: 菜单收起时,存在二级菜单的条目文本没有被隐藏(暂未解决 -> 傻der玩意儿突然自己就好了)

五、后台相关

5.1 服务器域名

http://sph-api.atguigu.cn

5.2 接口文档地址

http://39.98.123.211:8510/swagger-ui.html
http://139.198.104.58:8212/swagger-ui.html#/

六、总结

使用到的组件间通讯方式:
    1、props:父组件向子组件传递数据
    2、emit:自定义事件,子组件向父组件传递数据
    3、v-model:双向数据绑定
    4、pinia:状态管理
    5、defineExpose:子组件对外暴露方法,再父组件中调用子组件的方法

空文件

简介

使用Vite构建工具实现的基于 Vue3 + Typescript 的后台管理系统模板 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/ke-lin/project.git
git@gitee.com:ke-lin/project.git
ke-lin
project
project
master

搜索帮助