# vue3-vite
**Repository Path**: plugin_wk/vue3-vite
## Basic Information
- **Project Name**: vue3-vite
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-09-21
- **Last Updated**: 2026-09-21
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# vue3+vite+element-plus
## vite搭建项目
vite中文官网
Vite 需要 Node.js 版本 >= 12.0.0。
```
npm init vite@latest
vue create my-project 可选yarn/npm
```
或者
```
npm create vite@latest
```
## nvm
nodejs version management
[参考地址](https://blog.csdn.net/qq1195566313/article/details/125027972)
对node版本进行的管理工具,通过她可以安装和切换不同版本的nodejs
[配置参考](https://blog.csdn.net/m0_73391179/article/details/137641808)
* 安装nvm
[下载地址](https://github.com/coreybutler/nvm-windows/releases)
下载并安装nvm-setup.exe
* 常用命令
```
nvm list 查看当前安装的node版本有哪些
nvm list available 查看nodejs官网所有的版本
nvm install 版本号 安装指定版本的node
nvm use 版本号 切换当前使用的node版本
```
## nrm
nrm 是一个 npm 源管理器,允许你快速地在 npm 源间切换。
```
npm i -g nrm
```
[nrm安装完后报错不是内部命令](https://www.cnblogs.com/capchem/articles/15818196.html)
```
nrm ls 查看可选源
nrm current 查看当前源
nrm -h 显示所以命令
nrm use 源 切换源
```
* 星号消失问题
npm uninstall nrm -g
npm install Pana/nrm -g
## pinia
* 安装
```
npm i pinia -S
```
## 兄弟组件传参
mitt或者tiny-emittler
npm install --save
```js
import mitt from 'mitt'
const Mitt = mitt()
app.config.globalProperties.$bus = Mitt
const { proxy } = getCurrentInstance()
proxy.$bus.emit('方法名', '参数')
proxy.$bus.on('方法名', ('参数') => {})
```
# 安装
```javascript
// path
npm i @types/node - D
npm i @vueuse/core - S
// element-plus按需自动导入
npm i element - plus
npm i - D unplugin-vue-components unplugin-auto-import
// sass
npm i sass - S
// global.css
npm install--save normalize.css
// element-plus icons
npm install @element-plus/icons-vue
```
# scss
* 全局变量文件的导入与导出
```scss
$menuBg: #0087ff;
$menuBgHover: darken($menuBg, 20%);
// 导出
:export {
menuBg: $menubg;
menuBgHover: $menuBgHover;
}
// scss
@import '@/assets/style/variable.module.scss'
```
```javascript
// vue,通过module将scss模块化
import variables from '@/assets/style/variable.module.scss'
```
# reactive整个对象赋值
整个对象赋值是不起作用的,想整个对象赋值,需要在reactive中包裹一层对象
```javascript
let data = reactive({
onlyOneChild: null
})
```
# element-plus icons自动导入
* 安装
```
npm install @element-plus/icons-vue unplugin-icons -D
```
* vite.config.ts配置
```typescript
import Icons from 'unplugin-icons/vite'
import IconsResolver from 'unplugin-icons/resolver'
export default defineConfig(() => {
return {
base: '/wk/',
plugins: [
vue(),
AutoImport({
resolvers: [
// 自动导入图标组件
IconsResolver({
prefix: 'Icon',
})
],
// dts: path.resolve(pathSrc, 'auto-imports.d.ts')
}),
Components({
resolvers: [
// 自动注册图标组件
IconsResolver({
enabledCollections: ['ep'],
})
],
// dts: path.resolve(pathSrc, 'components.d.ts')
}),
Icons({
autoInstall: true
})
]
}
})
```
* 使用
```vue
```
# http-server部署
* 安装
```
npm i http-server -g
```
* 运行
运行需要在代码所在的文件夹外cmd运行
端口默认是8080
```
http-server -p 8080
```
# ref获取元素
通过v-for循环遍历生成的ref,再获取时,拿到的值为数组
原生html标签获取ref:proxy.$refs.xxx
自定义组件或ui框架组件获取ref:proxy.$refs.xxx.$el
# el-popover的样式修改
* 问题描述:
添加scoped时不起作用(使用deep也无法改变),包括在el-popover中的其他元素
* 解决方法:
在无scoped的标签中修改样式
# el-radio单选框去除label
```vue
{{''}}
```
# svg图标
https://igoutu.cn/icons/set/excel
https://www.svgrepo.com/(英文)
# svg-sprite-loader
project-backStage项目中
# vite-plugin-svg-icons
* main.js
```javascript
import 'virtual:svg-icons-register'
import SvgIcon from '@/components/SvgIcon'
import elementIcons from '@/components/SvgIcon/svgicon'
app.use(elementIcons)
app.component('svg-icon', SvgIcon)
```
* SvgIcon/index.vue
```vue
```
* SvgIcon/svgicon.js
```javascript
import * as components from '@element-plus/icons-vue'
export default {
install: (app) => {
for (const key in components) {
const componentConfig = components[key];
app.component(componentConfig.name, componentConfig);
}
},
};
```
* svg图片放在assets/icons/svg
* vite.config.js中配置createSvgIconsPlugin
# import引入的文件且只会在第一次import时执行。其他地方再次import它,就不会执行了
```js
var reader = new FileReader() //生成FileReader实例
reader.readAsArrayBuffer(file.raw)
reader.onload = function (res) { //有一个异步回调
let yy = new Uint8Array(res.target.result) //后端需要的二进制格式
let endd = [...yy] //后端需要的格式,我们改造成数组
// console.log(yy)
// let blob = window. URL.createObjectURL(new Blob([...yy]))
// console.log(blob)
// var files = new File([blob], res.data.filename, {
// type: 'application/json',
// lastModified: Date.now()
// })
// console.log(files)
}
```
# 若依框架vue3项目,组件通过路由noCache缓存问题
```vue
```
通过路由加载组件时,通过key值来标识不同的组件,key值不同会刷新组件
但是如果component内有二级甚至三级路由嵌套时,页面会整个刷新,而我们期待的是局部刷新
解决方法如下:
```vue
```
# 图片必填校验
* prop指定一个字段
* 成功回调删除提示信息
* 删除回调把字段清空
```js
const imgUploadSuccess = (id) => {
form.value.picture = id
proxy.$refs['singleRef'].clearValidate('picture')
}
const deleteImageRsMap = (attachId) => {
fileuploadRsMap.value.fileList = []
params.value.picture = null
}
```
Dialog中多次清空表单(点击修改一次、点击关闭一次)会影响下一次打开dialog的表单图片校验
# vue3 路由切换后,页面不显示内容,刷新后正常显示(路由切换白屏的问题)
```vue
```
# vite打包去除console、debugger信息
```ts
build: {
minify: "terser",
terserOptions: {
compress: {
drop_console: true,
drop_debugger: true,
},
},
}
```
# soft回退到add状态,hard回退到commit状态
# ctrl+点击文件路径打开文件,需要项目根目录下有jsconfig.json/tsconfig.json
# 自动导入icon
## 安装
```
npm i unplugin-icons unplugin-auto-import -D
```
## vite.config.js
```js
import Icons from 'unplugin-icons/vite'
import IconsResolver from 'unplugin-icons/resolver'
AutoImport({
resolvers: [
ElementPlusResolver(),
IconsResolver({
prefix: 'Icon',
})
],
dts: path.resolve(patn.resolve(__dirname, './'), 'auto-imports.d.ts'),
}),
Components({
resolvers: [
ElementPlusResolver(),
IconsResolver({
enabledCollections: ['ep'],
}),
],
dts: path.resolve(patn.resolve(__dirname, './'), 'auto-imports.d.ts'),
}),
Icons({
autoInstall: true,
})
```
## icon使用写法修改(enabledCollections)
前面添加i-ep-
```vue
```
# 打包报错解决
https://blog.csdn.net/woniuyibuyibu/article/details/145131057
* 打包报错:[vite:css] postcss-import
引入scss文件 `@import ""`
`@import url("")`是css的语法,所以报错
* [vite:build-import-analysis] Parse error @:1:1
页面不可以有import.meta.env
* WARN [plugin:vite:esbuild] This assignment will throw because "code" is a constant
定义模板字符串不可以使用const,const定义的变量不可以修改,修改为let
const code = `hello world${data}`