目录
二、搭建后台管理系统模块
2.配置prettier 【保证代码的美观】
3.配置stylelint
1.我们的项目中使用scss作为预处理器,安装以下依赖:
2. .stylelintrc.cjs配置文件
.stylelintrc.cjs // 在根目录下进行设置
3.stylelintignore忽略文件
4.运行脚本
5.最后配置统一的prettier来格式化我们的js和css,html代码
4.配置husky // 这里需要gitee码云 【建立远程联系】可以自己搜一下教程
5.commitLint配置
6.强制使用pnpm包管理器工具
三、项目集成
3.1集成element-plus
集成element-plus
3.2src别名的配置
3.3环境变量的配置
7.配置SVG图标
3.5集成sass
3.6mock数据
3.7axios二次封装
3.8API接口统一管理
四、统一路由管理
五.在配置完成之后就要开始正式写项目了
前言:在进行项目配置时一定要按照老师说的来执行,使用pnpm 进行安装,之前我自己第一次使用npm导致内容缺少,最后重新进行了构建
1. 安装依赖包
pnpm install -D eslint-plugin-prettier prettier eslint-config-prettier
2.prettierrc.json添加规则 【需要创建一个 .prettierrc.json 的文件】
.prettierrc.json
{
"singleQuote": true, // 要求字符串都是单引号
"semi": false, // 语句最后面的分号不要了
"bracketSpacing": true,
"htmlWhitespaceSensitivity": "ignore",
"endOfLine": "auto",
"trailingComma": "all",
"tabWidth": 2 // 缩进的时候占两个位置
}
3. 配置忽略文件
.prettierignore
/dist/*
/html/*
.local
/node_modules/**
**/*.svg
**/*.sh
/public/*
通过pnpm run lint去检测语法,如果出现不规范格式,通过pnpm run fix 修改
stylelint为css的lint工具。可格式化css代码,检查css语法错误与不合理的写法,指定css书写顺序等。
之前我安装的一直都只尚硅谷文档里面说的依赖安装之后一直报以下错误
pnpm 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
这可能是安装依赖版本的问题,
.stylelintrc.cjs
配置文件
.stylelintrc.cjs // 在根目录下进行设置
// @see https://stylelint.bootcss.com/
module.exports = {
extends: [
'stylelint-config-standard', // 配置stylelint拓展插件
'stylelint-config-html/vue', // 配置 vue 中 template 样式格式化
'stylelint-config-standard-scss', // 配置stylelint scss插件
'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',
'**/*.tsx',
'**/*.ts',
'**/*.json',
'**/*.md',
'**/*.yaml',
],
/**
* null => 关闭该规则
* always => 必须
*/
rules: {
'value-keyword-case': null, // 在 css 中使用 v-bind,不报错
'no-descending-specificity': null, // 禁止在具有较高优先级的选择器后出现被其覆盖的较低优先级的选择器
'function-url-quotes': 'always', // 要求或禁止 URL 的引号 "always(必须加上引号)"|"never(没有引号)"
'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默认样式的时候能使用到
},
],
},
}
.stylelintignore //忽略文件
/node_modules/*
/dist/*
/html/*
/public/*
"scripts": {
"lint:style": "stylelint src/**/*.{css,scss,vue} --cache --fix"
}
"scripts": {
"dev": "vite --open",
"build": "vue-tsc && vite build",
"preview": "vite preview",
"lint": "eslint src",
"fix": "eslint src --fix",
"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"
},
pnpm run format // 将代码进行格式化
在上面我们已经集成好了我们代码校验工具,但是需要每次手动的去执行命令才会格式化我们的代码。如果有人没有格式化就提交了远程仓库中,那这个规范就没什么用。所以我们需要强制让开发人员按照代码规范来提交。
要做到这件事情,就需要利用husky在代码提交之前触发git hook(git在客户端的钩子),然后执行npm run format
来自动的格式化我们的代码。
git hook:git在客户端的特定的场景下会执行的一个钩子
pnpm install -D husky
执行
npx husky-init
在运行这个命令的时候遇到了:Error: .git can't be found (see https://typicode.github.io/husk
这个问题的解决方法是:在文件根目录下运行git init 命令
之后在输入 npx husky-init 就可以了
pre-commit
就相当于 husky在客户端保留的一个钩子 【在远程仓库执行代码之前会执行一下这个钩子】
pnpm add @commitlint/config-conventional @commitlint/cli -D
添加配置文件,新建commitlint.config.cjs
(注意是cjs),然后添加下面的代码:
module.exports = {
extends: ['@commitlint/config-conventional'],
// 校验规则
rules: {
'type-enum': [
2,
'always',
[
'feat',
'fix',
'docs',
'style',
'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],
},
}
在package.json
中配置scripts命令
# 在scrips中添加下面的代码
{
"scripts": {
"commitlint": "commitlint --config commitlint.config.cjs -e -V"
},
}
配置结束,现在当我们填写commit
信息的时候,前面就需要带着下面的subject
\
'feat',//新特性、新功能
'fix',//修改bug
'docs',//文档修改
'style',//代码格式修改, 注意不是 css 修改
'refactor',//代码重构
'perf',//优化相关,比如提升性能、体验
'test',//测试用例修改
'chore',//其他修改, 比如改变构建流程、或者增加依赖库、工具等
'revert',//回滚到上一个版本
'build',//编译相关的修改,例如发布版本、对项目构建或者依赖的改动
配置husky
npx husky add .husky/commit-msg
运行之后发现
增加了上面的文件 【本地仓库向远程仓库提交信息的时候会运行的一个钩子】
在生成的commit-msg文件中添加下面的命令
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
pnpm commitlint
当我们 commit 提交信息时,就不能再随意写了,必须是 git commit -m 'fix: xxx' 符合类型的才可以,需要注意的是类型的后面需要用英文的 :,并且冒号后面是需要空一格的,这个是不能省略的
团队开发项目的时候,需要统一包管理器工具,因为不同包管理器工具下载同一个依赖,可能版本不一样,
导致项目出现bug问题,因此包管理器工具需要统一管理!!!
在根目录创建scritps/preinstall.js
文件,添加下面的内容
if (!/pnpm/.test(process.env.npm_execpath || '')) {
console.warn(
`\u001b[33mThis repository must using pnpm as the package manager ` +
` for scripts to work properly.\u001b[39m\n`,
)
process.exit(1)
}
配置命令
"scripts": {
"preinstall": "node ./scripts/preinstall.js"
}
当我们使用npm或者yarn来安装包的时候,就会报错了。原理就是在install的时候会触发preinstall(npm提供的生命周期钩子)这个文件里面的代码。
硅谷甄选运营平台,UI组件库采用的element-plus,因此需要集成element-plus插件!!!
官网地址:一个 Vue 3 UI 框架 | Element Plus
pnpm install element-plus
pnpm i @element-plus/icons-vue
安装element-plus 组件和element图标对应的组件
安装图标组件之后,这样进行使用
element-plus 支持国际化,
所以需要引入 【在main.ts中引入】
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
引入之后安装
// 安装element-plus 插件
app.use(ElementPlus,{
locale:zhCn // element-plus 国际化的 配置
})
标红原因:没有ts类型文件
解决方法①:@ts-ignore 让ts忽略这个文件的类型检测
入口文件main.ts全局安装element-plus,element-plus默认支持语言英语设置为中文
import ElementPlus from 'element-plus';
import 'element-plus/dist/index.css'
//@ts-ignore忽略当前文件ts类型的检测否则有红色提示(打包会失败)
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
app.use(ElementPlus, {
locale: zhCn
})
Element Plus全局组件类型声明
// tsconfig.json
{
"compilerOptions": {
// ...
"types": ["element-plus/global"]
}
}
配置完毕可以测试element-plus组件与图标的使用.
在开发项目的时候文件与文件关系可能很复杂,因此我们需要给src文件夹配置一个别名!!!
path: node平台提供的一个模块,可以获取到某一个文件或者文件夹的路径,可以获取相对路径或者绝对路径
// vite.config.ts
import {defineConfig} from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
export default defineConfig({
plugins: [vue()],
resolve: {
alias: {
"@": path.resolve("./src") // 相对路径别名配置,使用 @ 代替 src 这里是src文件夹的相对路径
}
}
})
TypeScript 编译配置
// tsconfig.json
{
"compilerOptions": {
"baseUrl": "./", // 解析非相对模块的基地址,默认是当前目录
"paths": { //路径映射,相对于baseUrl
"@/*": ["src/*"]
}
}
}
这里在app.vue 跟组件中引入孩子组件的时候报错,是因为自己安装了vetur扩展
这个扩展对于vue3的兼容性不是很好,
在写的时候看到说可以将这个扩展换成
vue language feature // 扩展
VueLF 是一个专门为 Vue 3 构建的语言支持插件。它基于@vue/reactivity按需计算一切,实现原生 TypeScript 语言服务级别的性能。
之后进行重启就可以了
之后在运行的时候发现出现了路径问题,
路径的引入就可以了
项目开发过程中,至少会经历开发环境、测试环境和生产环境(即正式环境)三个阶段。不同阶段请求的状态(如接口地址等)不尽相同,若手动切换接口地址是相当繁琐且易出错的。于是环境变量配置的需求就应运而生,我们只需做简单的配置,把环境状态切换的工作交给代码。
开发环境(development) 顾名思义,开发使用的环境,每位开发人员在自己的dev分支上干活,开发到一定程度,同事会合并代码,进行联调。
测试环境(testing) 测试同事干活的环境啦,一般会由测试同事自己来部署,然后在此环境进行测试
生产环境(production) 生产环境是指正式提供对外服务的,一般会关掉错误报告,打开错误日志。(正式提供给客户使用的环境。)
注意:一般情况下,一个环境对应一台服务器,也有的公司开发与测试环境是一台服务器!!!
项目根目录分别添加 开发、生产和测试环境的文件!
.env.development
.env.production
.env.test
# 变量必须以 VITE_ 为前缀才能暴露给外部读取
NODE_ENV = 'development'
VITE_APP_TITLE = '硅谷甄选运营平台' // 标题变量
VITE_APP_BASE_API = '/dev-api' // 基础路径
VITE_SERVE='开发阶段服务器的地址' // 这个需要自己写
NODE_ENV = 'production'
VITE_APP_TITLE = '硅谷甄选运营平台'
VITE_APP_BASE_API = '/prod-api'
# 变量必须以 VITE_ 为前缀才能暴露给外部读取
NODE_ENV = 'test'
VITE_APP_TITLE = '硅谷甄选运营平台'
VITE_APP_BASE_API = '/test-api'
测试环境如果也要一台服务器,也可以放置基础路径
配置运行命令:package.json
"scripts": {
"dev": "vite --open",
"build:test": "vue-tsc && vite build --mode test",
"build:pro": "vue-tsc && vite build --mode production",
"preview": "vite preview"
},
通过import.meta.env获取环境变量
在开发项目的时候经常会用到svg矢量图,而且我们使用SVG以后,页面上加载的不再是图片资源,
这对页面性能来说是个很大的提升,而且我们SVG文件比img要小的很多,放在项目中几乎不占用资源。
安装SVG依赖插件
pnpm install vite-plugin-svg-icons -D
在vite.config.ts
中配置插件
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
import path from 'path'
export default () => {
return {
plugins: [
createSvgIconsPlugin({
// Specify the icon folder to be cached
iconDirs: [path.resolve(process.cwd(), 'src/assets/icons')],
// Specify symbolId format
symbolId: 'icon-[dir]-[name]',
}),
],
}
}
入口文件导入 main.ts
import 'virtual:svg-icons-register'
报错原因:typescript 只能理解 .ts 文件,无法理解 .vue文件
解决方法:在项目根目录或 src 文件夹下创建一个后缀为 .d.ts 的文件,并写入以下内容:
declare module '*vue' {
import { ComponentOptions } from "vue";
const ComponentOptions: ComponentOptions
export default ComponentOptions
}
添加完文件之后,可能还会出现报错的红色波浪线,需要把这个xxx.d.ts文件打开一下,报错就没有了!
svg图标的封装
将svg-icon定义为全局组件
在main.ts中进行设置
利用自定义插件将组件变为全局组件
在components 中定义一个index.ts 的文件 // 对外暴露插件对象 插件对象里面有一个install 的方
法
//引入项目中全部的全局组件
import SvgIcon from './SvgIcon/index.vue'
import Pagination from './Pagination/index.vue'
import Category from './Category/index.vue'
//引入element-plus提供全部图标组件
import * as ElementPlusIconsVue from '@element-plus/icons-vue'
//全局对象
const allGloablComponent: any = { SvgIcon, Pagination, Category }
//对外暴露插件对象
export default {
//务必叫做install方法
install(app: any) {
//注册项目全部的全局组件
Object.keys(allGloablComponent).forEach((key) => {
//注册为全局组件
app.component(key, allGloablComponent[key])
})
//将element-plus提供图标注册为全局组件
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
app.component(key, component)
}
},
}
在mian.ts中引入自定义插件对象
我们目前在组件内部已经可以使用scss样式,因为在配置styleLint工具的时候,项目当中已经安装过sass sass-loader,因此我们再组件内可以使用scss语法!!!需要加上lang="scss"
接下来我们为项目添加一些全局的样式
在src/styles目录下创建一个index.scss文件,当然项目中需要用到清除默认样式,因此在index.scss引入reset.scss
@import reset.scss
在入口文件引入
import '@/styles'
但是你会发现在src/styles/index.scss全局样式文件中没有办法使用变量因此需要给项目中引入全局变量.
在style/variable.scss创建一个variable.scss文件!
在vite.config.ts文件配置如下:
export default defineConfig((config) => {
css: {
preprocessorOptions: {
scss: {
javascriptEnabled: true,
additionalData: '@import "./src/styles/variable.scss";',
},
},
},
}
}
@import "./src/styles/variable.less";
后面的;
不要忘记,不然会报错!
配置完毕你会发现scss提供这些全局变量可以在组件样式中使用了!!!
在这里的配置有 scss svg 不知道为什么自己的配置一直报错,但是有时看视频做的,自己的步骤没有任何错误!哭死 【后面进行回顾的时候发现:一定要使用pnpm安装插件!!!】
安装依赖:vite-plugin-mock - npm
pnpm install -D vite-plugin-mock mockjs
在 vite.config.js 配置文件启用插件。
import { UserConfigExport, ConfigEnv } from 'vite'
import { viteMockServe } from 'vite-plugin-mock'
import vue from '@vitejs/plugin-vue'
export default ({ command })=> {
return {
plugins: [
vue(),
viteMockServe({
localEnabled: command === 'serve',
}),
],
}
}
在根目录创建mock文件夹:去创建我们需要mock数据与接口!!!
在mock文件夹内部创建一个user.ts文件
在vite.config.ts 中引入
//mock插件提供方法
import { viteMockServe } from 'vite-plugin-mock'
//用户信息数据
function createUserList() {
return [
{
userId: 1,
avatar:
'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
username: 'admin',
password: '111111',
desc: '平台管理员',
roles: ['平台管理员'],
buttons: ['cuser.detail'],
routes: ['home'],
token: 'Admin Token',
},
{
userId: 2,
avatar:
'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
username: 'system',
password: '111111',
desc: '系统管理员',
roles: ['系统管理员'],
buttons: ['cuser.detail', 'cuser.user'],
routes: ['home'],
token: 'System Token',
},
]
}
export default [
// 用户登录接口
{
url: '/api/user/login',//请求地址
method: 'post',//请求方式
response: ({ body }) => {
//获取请求体携带过来的用户名与密码
const { username, password } = body;
//调用获取用户信息函数,用于判断是否有此用户
const checkUser = createUserList().find(
(item) => item.username === username && item.password === password,
)
//没有用户返回失败信息
if (!checkUser) {
return { code: 201, data: { message: '账号或者密码不正确' } }
}
//如果有返回成功信息
const { token } = checkUser
return { code: 200, data: { token } }
},
},
// 获取用户信息
{
url: '/api/user/info',
method: 'get',
response: (request) => {
//获取请求头携带token
const token = request.headers.token;
//查看用户信息是否包含有次token用户
const checkUser = createUserList().find((item) => item.token === token)
//没有返回失败的信息
if (!checkUser) {
return { code: 201, data: { message: '获取用户信息失败' } }
}
//如果有返回成功信息
return { code: 200, data: {checkUser} }
},
},
]
安装axios
pnpm install axios
最后通过axios测试接口!!!
在开发项目的时候避免不了与后端进行交互,因此我们需要使用axios插件实现发送网络请求。在开发项目的时候
我们经常会把axios进行二次封装。
目的:
1:使用请求拦截器,可以在请求拦截器中处理一些业务(开始进度条、请求头携带公共参数)
2:使用响应拦截器,可以在响应拦截器中处理一些业务(进度条结束、简化服务器返回的数据、处理http网络错误)
在根目录下创建utils/request.ts
import axios from "axios";
import { ElMessage } from "element-plus";
//创建axios实例
let request = axios.create({
baseURL: import.meta.env.VITE_APP_BASE_API,
timeout: 5000
})
//请求拦截器
request.interceptors.request.use(config => {
return config;
});
//响应拦截器
request.interceptors.response.use((response) => {
return response.data;
}, (error) => {
//处理网络错误
let msg = '';
let status = error.response.status;
switch (status) {
case 401:
msg = "token过期";
break;
case 403:
msg = '无权访问';
break;
case 404:
msg = "请求地址错误";
break;
case 500:
msg = "服务器出现问题";
break;
default:
msg = "无网络";
}
ElMessage({
type: 'error',
message: msg
})
return Promise.reject(error);
});
export default request;
在开发项目的时候,接口可能很多需要统一管理。在src目录下去创建api文件夹去统一管理项目的接口;
比如:下面方式
API
这里的.env 报错
解决方案:
在tsconfig.json
中添加"types": [ "vite/client" ]
,用来提供import.meta.env
上 Vite 注入的环境变量的类型定义
"compilerOptions": {
"types": [ "vite/client" ]
}
在src目录下env.d.ts
中添加以下代码,可以在在代码中获取这些以 VITE_ 为前缀的用户自定义环境变量的 TypeScript 智能提示
interface ImportMetaEnv {
readonly VITE_BASE_URL: string
}
interface ImportMeta {
readonly env: ImportMetaEnv
}
踩坑:如果不配置2、3点的话的话可能就会出现以下ts错误提示:类型ImportMetaEnv上不存在属性"env"
。 如果配置后仍然报错,需要重启编辑器
测试的时候:app里面显示
这个不知道怎么解决,但是不影响使用!
还有统一API 管理,这个地方需要重点理解一下,有助于提高效率,便于维护
在硅谷甄选项目中对于API的统一管理 以arc/api/user 为例
user/index.ts
// 统一管理项目用户相关的接口 注意这里不是过度封装,是把接口统计管理
// 发请求需要用到axios 使用咱们二次封装的axios
import request from "@/utils/request";
// 引入ts类型 【第一个是请求体类型,第二个是响应体类型】
import type { loginFrom,loginResponseData ,userResponseData} from "./type";
// 统一管理接口 enum —— 枚举
enum API{
LOGIN_URL="/user/login",
USERINFO_URL="/user/info"
}
// 暴露请求函数
// any 相当于js的写法不会触发ts类型校验
// 登录接口方法 在我们无法确定变量类型的时候可以将其指定为any
export const reqLogin =(data:loginFrom)=>request.post(API.LOGIN_URL,data);
// 获取用户信息的接口方法
export const reqUserInfo =()=>request.post(API.USERINFO_URL);
// type.ts
// 登录接口需要携带参数ts的类型
export interface loginFrom{
username:string,
password:string
}
interface dataType{
token:string
}
// 登录接口返回的数据类型 【登录的响应数据的类型】
export interface loginResponseData{
code:number,
data:dataType
}
// *************************************************************
// 定义服务器返回用户信息相关的数据类型
interface userInfo{
userId:number,
avatar:string,
username:string,
password:string,
desc:string,
roles:string[],
buttons:string[],
routes:string[],
token:string
}
interface user{
checkUser:userInfo
}
export interface userResponseData{
code:number,
data:user
}
这里定义接口相关的数据是根据mock里面的需要的数据进行定义的
首先需要安装:
pnpm i vue-router
之后就可以配置相应的路由,在src文件夹下创建views
需要有:login home 404 【注意这里是路由组件】
之后在src文件夹下创建路由文件夹
router/router.ts
通过vue-router 插件实现模板路由配置
路由默认是hash, hash模式:监听浏览器地址hash值变化,执行相应的js切换网页;
路由的配置
router/index.ts
// 这里路由模板的配置
// 通过vue-router 插件实现路由模板的配置
import {createRouter, createWebHashHistory} from 'vue-router';
// // constantRoutes:不需要动态判断权限的路由,如登录页、404、等通用页面;
import { cosnstantRoute } from './routes';
// 创建路由器
let router =createRouter({
// 路由模式hash hash模式:监听浏览器地址hash值变化,执行相应的js切换网页;
history:createWebHashHistory(),
routes:cosnstantRoute,
// 滚动行为
scrollBehavior(){
return {
left:0,
top:0
}
}
})
export default router
// vue-router 默认为 hash 模式,使用 URL 的 hash 来模拟一个完整的 URL,当 URL 改变时,页面不会重新加载;
// # 就是 hash符号,中文名为哈希符或者锚点,在 hash 符号后的值称为 hash 值。
// 值唯一 自动去重
// Vue-Element-Admin的router总使用constantRoutes和asyncRoutes两种定义路由,在store.modules.permission.js中对于两者的权限有默认的判断方式,然后再根目录下的permission.js中进行导航守卫逻辑;
// constantRoutes:不需要动态判断权限的路由,如登录页、404、等通用页面;
// asyncRoutes:需动态判断权限并通过addRoutes动态添加的页面;
// router/routes
// 对外暴露配置路由(常量路由)
export const cosnstantRoute=[
{
// 登录
path:'/login',
component:()=>import('@/views/login/index.vue'),
name:'login' // 命名路由 【命名空间】 之后做权限的时候会用到
},
{
// 登录成功以后展示数据的路由
path:'/',
component:()=>import('@/views/home/index.vue'),
name:'layout'
},
{
// 404
path:'/404',
component:()=>import('@/views/404/index.vue'),
name:'404'
},
{
// 任意路由 当上面的路由都没有匹配上的时候跳转这个路由
path:'/:pathMatch(.*)*',
redirect:'/404',
name:'Any'
},
]
// 这里是对index.ts 里面的路由进行了拆分
之后需要在入口文件进行注册:
// 引入路由进行注册 main.ts
import router from './router'
app.use(router);
登录页面的静态组件
pnpm i pinia
Pinia本质上依然是一个全局状态管理的库,用于跨组件、页面进行状态共享
在登录页面的逻辑大概是这样的:
1.创建一个views/login/index.vue组件
之后创建一个src/store/nodules/user.ts 小仓库 创建 src/store/index.ts 大仓库
// src/store/index.ts
// 创建大仓库
import {createPinia} from 'pinia'; // 从pinia中引入建立大仓库的方法
// 创建大仓库 对外暴露 入口文件需要引入
let pinia =createPinia();
// 对外暴露:入口文件需要安装仓库
export default pinia;
// 上面三行之后大仓库已经准备好了 下面在入口文件进行引入
main.ts
// 引入仓库
import pinia from './store'
// 安装仓库
app.use(pinia);
之后就可以