vite+vue3+pinia+pnpm+element-plus开发记录
阅读数:233 评论数:0
跳转到新版页面分类
html/css/js
正文
一、使用pnpm新建项目
可以使用npm 或yarn或pnpm来初始化Vite项目
pnpm create vite xxx(项目名称)
#选择vue
#选择js
cd xxx (进入项目目录)
#安装依赖
pnpm install
二、使用vue router
1、安装
pnpm install vue-router@4
2、新建router/index.js
在src目录下创建router文件夹,在router文件夹内创建index.js文件。
import { createRouter,createWebHistory } from "vue-router";
const router = createRouter({
history: createWebHistory(),
routes: [
// {
// path: '/HelloWorld',
// name: 'HelloWorld',
// component: () => import('@/components/HelloWorld.vue')
// },
{
path: '/HelloWorld',
name: 'HelloWorld',
component: () => import('../components/HelloWorld.vue')
},
]
})
export default router;
如果要使用上面那个路由的@/components/HelloWorld.vue
写法,需要去vite.config.js文件配置如下,才能使用@
写法
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { resolve } from 'path'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [vue()],
resolve: {
alias: {
'@': resolve(__dirname, 'src')
}
},
})
3、在main.js引入router
import { createApp } from 'vue'
import App from './App.vue'
import router from './router/index'
const app = createApp(App)
app.use(router)
app.mount('#app')
4、App.vue中添加
<template>
<div id="app">
<router-view />
</div>
</template>
<style scoped>
</style>
三、集成pinia
1、安装依赖
pnpm i pinia
2、使用示例 store/user.js
import { loginAction } from '@/api/user'
import { defineStore } from 'pinia'
export const useUserStore = defineStore('user', {
state: () => {
return {
username: '',
avatar: ''
}
},
actions: {
update_username(username) {
this.$patch((state) => {
state.username = username
})
},
login(data) {
return new Promise((resolve, reject) => {
loginAction(data).then(res => {
if (res.code === 200) {
resolve(null)
} else {
reject(res)
}
}).catch((error) => {
reject(error)
})
})
}
}
})
3、挂载
在main.js中引入
import { createApp } from 'vue'
import App from './App.vue'
import { createPinia } from 'pinia'
const app = createApp(App)
app.use(createPinia())
app.mount('#app')
四、集成element-plus
1、安装依赖
pnpm i element-plus
2、完整引入
import { createApp } from 'vue'
import ElementPlus from 'element-plus'
import locale from 'element-plus/lib/locale/lang/zh-cn'
import 'element-plus/dist/index.css'
import App from './App.vue'
const app = createApp(App)
// locale是为了汉化
app.use(ElementPlus, { locale })
app.mount('#app')
3、图标库配置
main.js中引入如下代码
import { createApp } from 'vue'
import App from './App.vue'
import * as ElementPlusIconsVue from '@element-plus/icons-vue'
const app = createApp(App)
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
app.component(key, component)
}
五、配置alias
一般使用@去引入某些文件,需要在vite.config.js中配置
import { defineConfig } from 'vite'
import path from 'path'
export default defineConfig({
// ...
define: {
// path库报错修复
'process.platform': null,
'process.version': null
},
resolve: {
alias: {
'@': path.resolve(__dirname, 'src'),
},
},
})
六、
1、安装依赖
pnpm i axios
2、封装axios
import axios from 'axios'
import router from '@/router'
import { ElLoading, ElMessage, ElMessageBox } from 'element-plus'
import { getToken } from '@/utils/auth'
import { useUserStore } from '@/store/user'
let reqConfig
let loadingE
const service = axios.create()
// 请求拦截
service.interceptors.request.use(
(request) => {
// token setting
request.headers['AUTHORIZE_TOKEN'] = getToken()
/* download file*/
if (request.isDownLoadFile) {
request.responseType = 'blob'
}
/* upload file*/
if (request.isUploadFile) {
request.headers['Content-Type'] = 'multipart/form-data'
}
reqConfig = request
if (request.bfLoading) {
loadingE = ElLoading.service({
lock: true,
text: '数据载入中',
background: 'rgba(0, 0, 0, 0.1)'
})
}
/*
*params会拼接到url上
* */
if (request.isParams) {
request.params = request.data
request.data = {}
}
return request
},
(err) => {
Promise.reject(err)
}
)
// 响应拦截
service.interceptors.response.use(
(res) => {
if (reqConfig.afHLoading && loadingE) {
loadingE.close()
}
// 如果是下载文件直接返回
if (reqConfig.isDownLoadFile) {
return res
}
const { code } = res.data
const successCode = '0,200,20000'
if (successCode.includes(code)) {
return res.data
} else {
//返回错误信息
//注:如果没有return 则,会放回到请求方法中.then ,返回的res为 undefined
return Promise.reject(res.data)
}
},
(err) => {
/*http错误处理*/
if (loadingE) loadingE.close()
ElMessage({
message: err,
type: 'error',
duration: 2 * 1000
})
const errObj = {
msg: err.toString(),
reqUrl: reqConfig.baseURL + reqConfig.url,
params: reqConfig.isParams ? reqConfig.params : reqConfig.data
}
return Promise.reject(JSON.stringify(errObj))
}
)
export function axiosReq({
url,
data,
method,
isParams,
bfLoading,
afHLoading,
isUploadFile,
isDownLoadFile,
baseURL
}) {
return service({
url: url,
method: method ?? 'get',
data: data ?? {},
isParams: isParams ?? false,
bfLoading: bfLoading ?? false,
afHLoading: afHLoading ?? true,
isUploadFile: isUploadFile ?? false,
isDownLoadFile: isDownLoadFile ?? false,
baseURL: baseURL ?? import.meta.env.VITE_APP_BASE_URL
})
}
export default request
3、使用
import request from '@/utils/request'
export function loginAction(data) {
return request({
url: 'xxx', // 请求地址
data,
method: 'post'
})
}
相关推荐
一、build视图分析依赖文件
分析项目中的文件大小及引用情用情况,是优化前的重要一步,从而采取文件分包、cdn引入等相关技术。
Rollup Plugin Visualizer是一个依赖分析插件,它
方法一、使用new URL
在 Vite 中,你可以使用 new URL 的方式来引用静态资源,这样 Vite 会处理资源的路径,并且在构建时会将资源复制到输出目录:
<script setup>
c
在我们封装请求的js文件中加一个判断即可,先声明一个变量showMsg来控制是否需要弹框,初始化为true,然后在请求判断中如果token失效导致走了401,先判断当前是否可以显示弹框,初始化为
一、生命周期
1、vue2生命周期
beforeCreate #实例初始化之后,进行数据侦听和事件/侦听器的配置之前同步调用
created #实例创建完成后被立即同步调用
beforeMount #
一、概述
yarn命令行
npm命令行
yarn
npm
yarn add package --dev
npm install package --save-dev
yarn a
一、概述
Pinia是为vue开发的一个全新的状态管理器。
1、vuex
State、Getters、Mutations(同步)、Actions(异步)
Vuex4用于vue3
Vue3用于vue2
一、概述
都是现代化打包工具
二、对比
1、底层语言
从底层原理上来说,Vite是基于esbuild预构建依赖。而esbuild是采用go语言编写,因为go语言的操作是纳秒级别,而js是以毫秒计数,所
一、准备工作
需要安装node.js
pnpm全称是performant npm意为高性能的npm
1、depedencies和devDependencies的区别
(1)在webpack打包的时候,
一、概述
<script setup> 是在单文件组件(SFC)中使用组合式API的编译时语法糖,解决Vue3.0中setup需要频繁将声明的变量、函数以及import引入的内容通过return向外
一、概述
在vue2中,data函数里返回的值直接为响应式,但在vue3中我们需要使用一些函数才能达到这个效果。
setup函数中拿不到vue的this。
二、常用函数
<template>
<d