Appearance
1、父子组件实现双向绑定的理解
借助 computed 方法,proxy 代理对象,实现 get,set 方法
2、动态组件
组件暴露
父组调用
vue
const tabOptions = ref() TabPaneAllRef?.value[index].executeRefFn()
3、public 使用本地文件
导入本地文件
- /public/panel/cdn/**
4、vite.config.js 插件优化
插件配置信息
- resolvers: [ElementPlusResolver]是 element-plus 的按需引入
扩展 vite+vue3+ts
js
import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
// 引入element-plus
import AutoImport from 'unplugin-auto-import/vite' // 自动引入包
import Components from 'unplugin-vue-components/vite' // 自动引入组件
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
import { htmlPlugin } from './html-plugin.js'
import path from 'path'
import progress from 'vite-plugin-progress' // 打包进度条
import { visualizer } from 'rollup-plugin-visualizer' // 分析代码结构
import vueSetupExtend from 'vite-plugin-vue-setup-extend' // 组件命名
// https://vitejs.dev/config/
export default defineConfig(({ mode }) => {
const timestamp = +new Date()
return {
server: {
host: '0.0.0.0',
port: 5173,
cors: true,
open: true,
hmr: true,
proxy: {
'/api': {
target: loadEnv(mode, process.cwd()).VITE_BASE_API,
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, '')
},
'/upload': {
target: 'https://upload-z2.qiniup.com/',
changeOrigin: true,
rewrite: (path) => path.replace(/^upload/, '')
}
}
},
plugins: [
vue(),
AutoImport({
// 需要去解析的文件
include: [
/\.[tj]sx?$/, // .ts, .tsx, .js, .jsx
/\.vue$/,
/\.vue\?vue/, // .vue
/\.md$/ // .md
],
// imports 指定自动引入的包位置(名)
imports: ['vue', 'pinia', 'vue-router', '@vueuse/core'],
dts: 'src/auto-imports.d.ts', // 生成ts文件不然volar会报错找不到
// 生成相应的自动导入json文件。
eslintrc: {
// 启用
enabled: true,
// 生成自动导入json文件位置
filepath: './.eslintrc-auto-import.json',
// 全局属性值
globalsPropValue: true
},
resolvers: [ElementPlusResolver()]
}),
Components({
// imports 指定组件所在目录,默认为 src/components
dirs: ['src/components/', 'src/view/'],
include: [/\.vue$/, /\.vue\?vue/, /\.md$/],
resolvers: [ElementPlusResolver()]
}),
vueSetupExtend(),
progress(),
visualizer()
].concat(mode === 'production' ? htmlPlugin() : []),
// 配置别名
resolve: {
alias: {
'@': path.resolve(__dirname, 'src')
}
},
// 构建
build: {
assetsDir: 'assets/css/', // 静态资源存放
target: 'modules', // 设置最终构建的浏览器兼容目标。modules:支持原生 ES 模块的浏览器
sourcemap: false, // 构建后是否生成 source map 文件
minify: 'terser', // 混淆器,terser构建后文件体积更小
/** 在打包代码时移除 console.log 和 注释 */
terserOptions: {
compress: {
drop_console: false,
pure_funcs: ['console.log']
},
format: {
/** 删除注释 */
comments: false
}
},
rollupOptions: {
output: {
chunkFileNames: 'assets/js/[name]-[hash].' + timestamp + '.js',
entryFileNames: 'assets/js/[name]-[hash].' + timestamp + '.js',
assetFileNames: 'assets/[ext]/[name]-[hash].' + timestamp + '.[ext]'
}
}
}
}
})
5、ant-design-vue2.2.8 踩坑 依赖问题
DANGER
[vite] Failed to load source map for /node_modules/.vite/chunk-CCWPAK2K.js?v=XXXXXXXX.
or [vite]:new dependencies found: ant-design-vue/es/spin/style/css, ant-design-vue/es/select/style/css, updating...
图片:
原因:node_modules/.vite
只有pack.json
文件
已经排除方法
- 1.删除 node_modules,重新安装
- 2.版本 less,vite,vue,ant-design-vue 版本问题
- 3.三方插件影响【新增插件重新安装影响到 node_modules 都会出现这个问题】
- 4.vite.config.js 文件中的 vite-plugin-components 已经停更,ant-design-vue3 转用 # unplugin-vue-components