vite
导入vue组件注意点
手动导入的情况下,不能省略vue后缀,会报错
图片路径
绝对路径
<img src="src/assets/img"/>
<img src="src/assets/img"/>
相对路径
<img src="../../assets/img"/>
<img src="../../assets/img"/>
动态绑定路径
但是上述写法不适用于动态绑定路径
因为vite中没有require
写法一(推荐)
<template><img :src="requireImg('logo.png')" /></template>
<script lang="ts" setup>
const function requireImg(name) {
return new URL(`/src/assets/imgs/${name}`, import.meta.url).href
}
</script>
<template><img :src="requireImg('logo.png')" /></template>
<script lang="ts" setup>
const function requireImg(name) {
return new URL(`/src/assets/imgs/${name}`, import.meta.url).href
}
</script>
写法二(不推荐)
使用vite的i
或i
,两者的区别是前者懒加载资源,后者直接引入
这种写法缺点很明显:
引入的文件必须指定到具体文件夹路径,传入的变量中只能为文件名,不能包含文件路径
<template><img :src="requireImg('logo.png')" /></template>
<script lang="ts" setup>
const requireImg = (name: string) => {
const path = `/src/assets/${name}`
const modules = import.meta.globEager("/src/assets/*") // 这里的路径不能为变量
return modules[path].default
}
</script>
<template><img :src="requireImg('logo.png')" /></template>
<script lang="ts" setup>
const requireImg = (name: string) => {
const path = `/src/assets/${name}`
const modules = import.meta.globEager("/src/assets/*") // 这里的路径不能为变量
return modules[path].default
}
</script>
css使用路径别名
vue/cli(基于webpack)使用~@assets
路径别名引入图片资源, 来从src/assets
目录下引入图片
background: url("~@assets/imgs/img1.png")
background: url("~@assets/imgs/img1.png")
vite中可以自定义路径别名@assets,从而实现同样的路径别名
resolve: {
// 路径别名
alias: {
"@": resolve(__dirname, "src"),
"@assets": resolve(__dirname, "src/assets"),
}
},
resolve: {
// 路径别名
alias: {
"@": resolve(__dirname, "src"),
"@assets": resolve(__dirname, "src/assets"),
}
},
unplugin-auto-import
自动导入composition api和生成全局typescript声明
下载
yarn add -D unplugin-auto-import
yarn add -D unplugin-auto-import
vite.config.ts配置
import AutoImport from 'unplugin-auto-import/vite'
export default defineConfig({
...
plugins: [
...
AutoImport({
imports: ['vue', 'vue-router', "vuex"], // 自动导入composition api
dts: 'src/auto-import.d.ts' // 生成 `auto-import.d.ts` 全局声明
})
]
})
import AutoImport from 'unplugin-auto-import/vite'
export default defineConfig({
...
plugins: [
...
AutoImport({
imports: ['vue', 'vue-router', "vuex"], // 自动导入composition api
dts: 'src/auto-import.d.ts' // 生成 `auto-import.d.ts` 全局声明
})
]
})
vue.config.js配置
const AutoImport = require("unplugin-auto-import/webpack")
module.exports = {
...
configureWebpack: {
...
plugins: [
AutoImport({
imports: ["vue", "vue-router", "vuex"], // 自动导入composition api
dts: "src/auto-import.d.ts", // 生成 `auto-import.d.ts` 全局声明
})
}
}
const AutoImport = require("unplugin-auto-import/webpack")
module.exports = {
...
configureWebpack: {
...
plugins: [
AutoImport({
imports: ["vue", "vue-router", "vuex"], // 自动导入composition api
dts: "src/auto-import.d.ts", // 生成 `auto-import.d.ts` 全局声明
})
}
}
自定义导入包
unplugin-auto-import内置了一些主流的包,但实际开发中这远远不够
如果想导入其他的包,可以在imports中使用对象形式, 设置自定义按需导入的包,当然,你需要先安装这个包
vite.config.ts设置
AutoImport({
imports: ["vue", "vue-router", { "just-now-time": ["nowTime", "formatTime", "timeCn", "whatDay", "whatDayEn"] }], // 自动导入composition api
dts: "src/auto-import.d.ts", // 生成 `auto-import.d.ts` 全局声明
})
AutoImport({
imports: ["vue", "vue-router", { "just-now-time": ["nowTime", "formatTime", "timeCn", "whatDay", "whatDayEn"] }], // 自动导入composition api
dts: "src/auto-import.d.ts", // 生成 `auto-import.d.ts` 全局声明
})
相当于
import { nowTime,formatTime,timeCn,whatDay,whatDayEn } from "just-now-time"
import { nowTime,formatTime,timeCn,whatDay,whatDayEn } from "just-now-time"
导入本地路径的ts文件
也可以使用自定义导入包的写法,来导入指定路径下的ts文件
src目录下新建test.ts
export function useA() {
console.log("A")
}
export function useA() {
console.log("A")
}
vite.config.ts设置
AutoImport({
imports: ["vue", "@vueuse/core", { "./test": ["useA"] }],
})
AutoImport({
imports: ["vue", "@vueuse/core", { "./test": ["useA"] }],
})
相当于
import { useA } from "./test"
import { useA } from "./test"
unplugin-vue-components
自动注册和导入组件
下载
yarn add -D unplugin-vue-components
yarn add -D unplugin-vue-components
vite.config.ts配置
import Components from "unplugin-vue-components/vite"
export default defineConfig({
plugins: [
...
Components({
dirs: ["src/components"], // 要导入组件的目录路径
deep: true, // 搜索子目录
dts: "src/components/components.d.ts", // 生成 `components.d.ts` 全局声明
})
]
})
import Components from "unplugin-vue-components/vite"
export default defineConfig({
plugins: [
...
Components({
dirs: ["src/components"], // 要导入组件的目录路径
deep: true, // 搜索子目录
dts: "src/components/components.d.ts", // 生成 `components.d.ts` 全局声明
})
]
})
vue.config.js配置
const Components = require("unplugin-vue-components/webpack")
module.exports = {
...
configureWebpack: {
plugins: [
...
// 自动按需导入element-plus组件
Components({
dirs: ["src/components"], // 要导入组件的目录路径
deep: true, // 搜索子目录
dts: "src/components/components.d.ts", // 生成 `components.d.ts` 全局声明
})
]
}
}
const Components = require("unplugin-vue-components/webpack")
module.exports = {
...
configureWebpack: {
plugins: [
...
// 自动按需导入element-plus组件
Components({
dirs: ["src/components"], // 要导入组件的目录路径
deep: true, // 搜索子目录
dts: "src/components/components.d.ts", // 生成 `components.d.ts` 全局声明
})
]
}
}
现在src/components目录下的所有vue组件会自动注册为组件,直接使用即可
按需导入组件库
内置Resolver可以按需导入很多组件库,比如element-plus
yarn add element-plus
yarn add -D sass
yarn add -D sass-loader@10.2.0
yarn add element-plus
yarn add -D sass
yarn add -D sass-loader@10.2.0
之后如下配置
vite.config.ts配置
import Components from "unplugin-vue-components/vite"
import { ElementPlusResolver } from "unplugin-vue-components/resolvers"
export default defineConfig({
plugins: [
...
Components({
dirs: ["src/components"], // 要搜索组件的目录的相对路径
deep: true, // 搜索子目录
dts: "src/components/components.d.ts", // 生成 `components.d.ts` 全局声明
resolvers: [
ElementPlusResolver({
importStyle: "sass"
})
]
})
]
})
import Components from "unplugin-vue-components/vite"
import { ElementPlusResolver } from "unplugin-vue-components/resolvers"
export default defineConfig({
plugins: [
...
Components({
dirs: ["src/components"], // 要搜索组件的目录的相对路径
deep: true, // 搜索子目录
dts: "src/components/components.d.ts", // 生成 `components.d.ts` 全局声明
resolvers: [
ElementPlusResolver({
importStyle: "sass"
})
]
})
]
})
vue.config.js配置
const Components = require("unplugin-vue-components/webpack")
const { ElementPlusResolver } = require("unplugin-vue-components/resolvers")
module.exports = {
...
configureWebpack: {
plugins: [
...
// 自动按需导入element-plus组件
Components({
dirs: ["src/components"], // 要导入组件的目录路径
deep: true, // 搜索子目录
dts: "src/components/components.d.ts", // 生成 `components.d.ts` 全局声明
resolvers: [
ElementPlusResolver({
importStyle: "sass"
})
]
})
]
}
const Components = require("unplugin-vue-components/webpack")
const { ElementPlusResolver } = require("unplugin-vue-components/resolvers")
module.exports = {
...
configureWebpack: {
plugins: [
...
// 自动按需导入element-plus组件
Components({
dirs: ["src/components"], // 要导入组件的目录路径
deep: true, // 搜索子目录
dts: "src/components/components.d.ts", // 生成 `components.d.ts` 全局声明
resolvers: [
ElementPlusResolver({
importStyle: "sass"
})
]
})
]
}
这样就可以在页面中直接使用element-plus组件了,是的,不需要在main.ts里导入element-plus,然后进行Vue.use,就是这么厉害,直接在页面中用就完事了,并且按需加载组件和样式,非常的强大
全局scss
创建scss文件
新建src/assets/css/global.scss,内容如下:
// 这部分用于更改element-plus主题色
$blue: skyblue;
@forward "element-plus/theme-chalk/src/common/var.scss" with (
$colors: (
"primary": (
"base": $blue
)
)
);
:export {
primaryColor: $blue;
}
// 这部分定义全局的scss混用
@mixin flex {
display: flex;
align-items: center;
}
@mixin background {
background-size: 100% 100%;
background-repeat: no-repeat;
}
// 这部分用于更改element-plus主题色
$blue: skyblue;
@forward "element-plus/theme-chalk/src/common/var.scss" with (
$colors: (
"primary": (
"base": $blue
)
)
);
:export {
primaryColor: $blue;
}
// 这部分定义全局的scss混用
@mixin flex {
display: flex;
align-items: center;
}
@mixin background {
background-size: 100% 100%;
background-repeat: no-repeat;
}
vite.config.ts配置
export default defineConfig({
base: "./", // 根路径
// 全局加载scss文件
css: {
preprocessorOptions: {
scss: {
additionalData: `@use "src/assets/css/element-plus.scss" as *;`,
charset: false
}
}
},
...
})
export default defineConfig({
base: "./", // 根路径
// 全局加载scss文件
css: {
preprocessorOptions: {
scss: {
additionalData: `@use "src/assets/css/element-plus.scss" as *;`,
charset: false
}
}
},
...
})
vue.config.js配置
module.exports = {
publicPath: "./", // 根路径
// 全局加载scss文件
css: {
loaderOptions: {
sass: {
prependData: `@use "src/assets/css/element-plus.scss" as *;`
}
}
},
...
}
module.exports = {
publicPath: "./", // 根路径
// 全局加载scss文件
css: {
loaderOptions: {
sass: {
prependData: `@use "src/assets/css/element-plus.scss" as *;`
}
}
},
...
}
vite-plugin-pages
vite插件,可以读取文件夹下的vue文件,自动生成vue-router的路由信息,这样以后每次有新的vue页面增加,都不用去更改vue-router的路由信息代码了,减少了工作量
下载
yarn add -D vite-plugin-pages
yarn add vue-router@next
yarn add -D vite-plugin-pages
yarn add vue-router@next
vite.config.ts配置
import Pages from "vite-plugin-pages"
export default defineConfig({
plugins: [
...
Pages({
// 自动读取src/views下的vue文件,生成路由信息,默认路由路径'/‘
dirs: [{ dir: "src/views", baseRoute: "/" }],
// 异步方式加载路由组件
importMode: "async",
// 遍历路由信息,给默认路由加一个redirect
extendRoute(route) {
if (route.path === "/") return { ...route, redirect: "login" }
}
})
]
})
import Pages from "vite-plugin-pages"
export default defineConfig({
plugins: [
...
Pages({
// 自动读取src/views下的vue文件,生成路由信息,默认路由路径'/‘
dirs: [{ dir: "src/views", baseRoute: "/" }],
// 异步方式加载路由组件
importMode: "async",
// 遍历路由信息,给默认路由加一个redirect
extendRoute(route) {
if (route.path === "/") return { ...route, redirect: "login" }
}
})
]
})
main.ts中使用vue-router
import { createApp } from "vue"
import App from "./App.vue"
import { createRouter, createWebHashHistory } from "vue-router"
// 这里就是vite-plugin-pages生成的路由信息,正常使用即可
import routes from "virtual:generated-pages"
const router = createRouter({
history: createWebHashHistory(),
routes
})
createApp(App).use(router).mount("#app")
import { createApp } from "vue"
import App from "./App.vue"
import { createRouter, createWebHashHistory } from "vue-router"
// 这里就是vite-plugin-pages生成的路由信息,正常使用即可
import routes from "virtual:generated-pages"
const router = createRouter({
history: createWebHashHistory(),
routes
})
createApp(App).use(router).mount("#app")
使用typescript支持
在env.d.ts中加入 /// <reference types="vite-plugin-pages/client" />
/// <reference types="vite/client" />
/// <reference types="vite-plugin-pages/client" />
declare module "*.vue" {
import type { DefineComponent } from "vue"
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types
const component: DefineComponent<{}, {}, any>
export default component
}
/// <reference types="vite/client" />
/// <reference types="vite-plugin-pages/client" />
declare module "*.vue" {
import type { DefineComponent } from "vue"
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types
const component: DefineComponent<{}, {}, any>
export default component
}
现在可以在src/views下定义vue文件,会自动生成vue-router的路由信息 那么问题来了,遵循的规则是什么呢?很简单,像示例这样即可,我觉得还是很一目了然的,不用太多介绍
- src/views/index.vue -> /
- src/views/index/a.vue -> /a // 这里的a.vue就是index.vue的子路由(children)
- src/views/father.vue -> /father
- src/views/father/son.vue -> /father/son
- src/views/father/[id].vue -> /father/:id
- src/views/[father]/son.vue -> /:father/son
综上
综上的依赖下载
yarn add -D unplugin-auto-import unplugin-vue-components vite-plugin-pages sass sass-loader@10.2.0
yarn add element-plus vue-router@next
yarn add -D unplugin-auto-import unplugin-vue-components vite-plugin-pages sass sass-loader@10.2.0
yarn add element-plus vue-router@next
vite.config.ts配置
import { defineConfig } from "vite"
import vue from "@vitejs/plugin-vue"
import { resolve } from "path"
import AutoImport from "unplugin-auto-import/vite"
import Components from "unplugin-vue-components/vite"
import { ElementPlusResolver } from "unplugin-vue-components/resolvers"
import Pages from "vite-plugin-pages"
export default defineConfig({
base: "./", // 根路径
// 全局加载的scss文件
css: {
preprocessorOptions: {
scss: {
additionalData: `@use "src/assets/css/element-plus.scss" as *;`,
charset: false
}
}
},
plugins: [
// 识别vue
vue(),
// 自动导入vue3中composition api函数
AutoImport({
include: [/\.vue$/, /\.vue\?vue/], // 作用于所有vue文件
dts: "src/auto-import.d.ts", // 生成全局的vue函数的typescript定义
imports: ["vue", "vue-router", "vuex"] // vue和vue-router都自动导入
}),
// 自动按需导入element-plus组件
Components({
dts: "src/element-plus-auto-import.d.ts",
resolvers: [
ElementPlusResolver({
importStyle: "sass"
})
]
}),
Pages({
// 自动读取src/views下的vue文件,生成路由信息,默认路由路径'/‘
dirs: [{ dir: "src/views", baseRoute: "/" }],
// 异步方式加载路由组件
importMode: "async"
// 遍历路由信息,给默认路由加一个redirect
// extendRoute(route) {
// if (route.path === "/") return { ...route, redirect: "login" }
// }
})
],
// 路径别名
resolve: {
alias: {
"@": resolve("src"),
"~@assets": resolve(__dirname, "src/assets"),
"@utils": resolve("src/utils")
}
},
server: {
open: true // 是否自动打开浏览器
}
})
import { defineConfig } from "vite"
import vue from "@vitejs/plugin-vue"
import { resolve } from "path"
import AutoImport from "unplugin-auto-import/vite"
import Components from "unplugin-vue-components/vite"
import { ElementPlusResolver } from "unplugin-vue-components/resolvers"
import Pages from "vite-plugin-pages"
export default defineConfig({
base: "./", // 根路径
// 全局加载的scss文件
css: {
preprocessorOptions: {
scss: {
additionalData: `@use "src/assets/css/element-plus.scss" as *;`,
charset: false
}
}
},
plugins: [
// 识别vue
vue(),
// 自动导入vue3中composition api函数
AutoImport({
include: [/\.vue$/, /\.vue\?vue/], // 作用于所有vue文件
dts: "src/auto-import.d.ts", // 生成全局的vue函数的typescript定义
imports: ["vue", "vue-router", "vuex"] // vue和vue-router都自动导入
}),
// 自动按需导入element-plus组件
Components({
dts: "src/element-plus-auto-import.d.ts",
resolvers: [
ElementPlusResolver({
importStyle: "sass"
})
]
}),
Pages({
// 自动读取src/views下的vue文件,生成路由信息,默认路由路径'/‘
dirs: [{ dir: "src/views", baseRoute: "/" }],
// 异步方式加载路由组件
importMode: "async"
// 遍历路由信息,给默认路由加一个redirect
// extendRoute(route) {
// if (route.path === "/") return { ...route, redirect: "login" }
// }
})
],
// 路径别名
resolve: {
alias: {
"@": resolve("src"),
"~@assets": resolve(__dirname, "src/assets"),
"@utils": resolve("src/utils")
}
},
server: {
open: true // 是否自动打开浏览器
}
})
vue.config.js配置
const AutoImport = require("unplugin-auto-import/webpack")
const Components = require("unplugin-vue-components/webpack")
const { ElementPlusResolver } = require("unplugin-vue-components/resolvers")
module.exports = {
publicPath: "./", // 根路径
productionSourceMap: false, // 打包后不生成map文件
// 全局加载的scss文件
css: {
loaderOptions: {
sass: {
prependData: `@use "src/assets/css/element-plus.scss" as *;`
}
}
},
configureWebpack: {
plugins: [
AutoImport({
include: [/\.vue$/, /\.vue\?vue/], // 作用于所有vue文件
dts: "src/auto-import.d.ts", // 生成全局的vue函数的typescript定义
imports: ["vue", "vue-router", "vuex"] // 自动导入composition api
}),
// 自动按需导入element-plus组件
Components({
dts: true,
resolvers: [
ElementPlusResolver({
importStyle: "sass"
})
]
})
],
// 路径别名
resolve: {
alias: {
"@assets": "@/assets",
"@utils": "@/utils"
}
}
},
// 端口号
devServer: {
port: 8080
}
}
const AutoImport = require("unplugin-auto-import/webpack")
const Components = require("unplugin-vue-components/webpack")
const { ElementPlusResolver } = require("unplugin-vue-components/resolvers")
module.exports = {
publicPath: "./", // 根路径
productionSourceMap: false, // 打包后不生成map文件
// 全局加载的scss文件
css: {
loaderOptions: {
sass: {
prependData: `@use "src/assets/css/element-plus.scss" as *;`
}
}
},
configureWebpack: {
plugins: [
AutoImport({
include: [/\.vue$/, /\.vue\?vue/], // 作用于所有vue文件
dts: "src/auto-import.d.ts", // 生成全局的vue函数的typescript定义
imports: ["vue", "vue-router", "vuex"] // 自动导入composition api
}),
// 自动按需导入element-plus组件
Components({
dts: true,
resolvers: [
ElementPlusResolver({
importStyle: "sass"
})
]
})
],
// 路径别名
resolve: {
alias: {
"@assets": "@/assets",
"@utils": "@/utils"
}
}
},
// 端口号
devServer: {
port: 8080
}
}
vite-plugin-md
yarn add -D vite-plugin-md
yarn add -D vite-plugin-md
自动注册 md 文件为 vue 组件
prism-theme-vars
yarn add prism-theme-vars
yarn add prism-theme-vars
prism 主题变量
新建 style.css,在 main.js 中导入
安装 vue devtools
vue devtools 是一个谷歌插件,用于开发 vue 项目时进行调试
使用极速插件网(一个快速安装下载谷歌浏览器插件的网站)进行下载安装
下载完成后如何安装插件:
打开谷歌浏览器
点击右上角三个点
选择更多工具
选择拓展程序
打开开发者模式
拖拽解压后的插件至浏览器中
安装postcss-pxtorem/autoprefixer
postcss-pxtorem 用于将px转换成rem
autoprefixer 用于添加兼容性的css属性名前缀
npm i -D postcss-pxtorem
npm i -D autoprefixer
npm i -D postcss-pxtorem
npm i -D autoprefixer
根目录新建postcss.config.js
module.exports = {
plugins: {
"postcss-pxtorem": {
rootValue: 192, // 换算的基数默认100,192px宽元素换算成1rem
propList: ["*"], // 需要转换px为rem的属性
unitPrecision: 5, // 允许REM单位增长到的十进制数字
exclude: /node_modules/i // 不转换node_modules中内容,主要是组件库的字体
},
autoprefixer: {
overrideBrowserslist: ["Android 4.1", "iOS 7.1", "Chrome > 31", "ff > 31", "ie >= 8", "last 10 versions"],
grid: true
}
}
}
module.exports = {
plugins: {
"postcss-pxtorem": {
rootValue: 192, // 换算的基数默认100,192px宽元素换算成1rem
propList: ["*"], // 需要转换px为rem的属性
unitPrecision: 5, // 允许REM单位增长到的十进制数字
exclude: /node_modules/i // 不转换node_modules中内容,主要是组件库的字体
},
autoprefixer: {
overrideBrowserslist: ["Android 4.1", "iOS 7.1", "Chrome > 31", "ff > 31", "ie >= 8", "last 10 versions"],
grid: true
}
}
}
设置proxy
Type: string | Object
如果前端应用和后端 API 服务器没有运行在同一个主机上需要在开发环境下将 API 请求代理到 API 服务器。这个问题可以通过 vue.config.js
中的 devServer.proxy
选项来配置
devServer.proxy
可以是一个指向开发环境 API 服务器的字符串:
module.exports = {
devServer: {
proxy: 'http://localhost:4000'
}
}
module.exports = {
devServer: {
proxy: 'http://localhost:4000'
}
}
这会告诉开发服务器将任何未知请求 (没有匹配到静态文件的请求) 代理到http://localhost:4000
如果你想要更多的代理控制行为,也可以使用一个 path: options
对象。完整的选项可以查阅http-proxy-middleware
配置element-plus
使用图标(基于iconify)
Iconify支持100多个图标集,上万种图标可随意使用,https://icon-sets.iconify.design/
npm i -D @iconify-json/ep unplugin-icons
npm i -D @iconify-json/ep unplugin-icons
import { defineConfig } from "vite"
import vue from "@vitejs/plugin-vue"
import { resolve } from "path"
import Icons from "unplugin-icons/vite"
import IconsResolver from "unplugin-icons/resolver"
import AutoImport from "unplugin-auto-import/vite"
import Components from "unplugin-vue-components/vite"
import { ElementPlusResolver } from "unplugin-vue-components/resolvers"
import Pages from "vite-plugin-pages"
export default defineConfig({
base: "./", // 根路径
// 全局加载的scss文件
css: {
preprocessorOptions: {
scss: {
additionalData: `@use "src/assets/css/element-plus.scss" as *;`,
charset: false
}
}
},
plugins: [
// 识别vue
vue(),
Pages({
// 自动读取src/views下的vue文件,生成路由信息,默认路由路径'/‘
dirs: [{ dir: "src/views", baseRoute: "/" }],
// 异步方式加载路由组件
importMode: "async"
// 遍历路由信息,给默认路由加一个redirect
// extendRoute(route) {
// if (route.path === "/") return { ...route, redirect: "login" }
// }
}),
// 自动导入vue3中composition api函数
AutoImport({
include: [/\.vue$/, /\.vue\?vue/], // 作用于所有vue文件
dts: "src/auto-import.d.ts", // 生成全局的vue函数的typescript定义
imports: ["vue", "vue-router", "vuex"], // vue和vue-router都自动导入
resolvers: [
// 自动导入element-plus函数,如message
ElementPlusResolver(),
// 自动导入图标组件
IconsResolver({
prefix: "Icon"
})
]
}),
// 自动按需导入element-plus组件
Components({
dts: "src/element-plus-auto-import.d.ts",
// 自动注册图标组件
resolvers: [
IconsResolver({
enabledCollections: ["ep"]
}),
ElementPlusResolver({
importStyle: "sass"
})
]
}),
// 自动下载
Icons({
autoInstall: true
})
],
// 路径别名
resolve: {
alias: {
"@": resolve("src"),
"~@assets": resolve(__dirname, "src/assets"),
"@utils": resolve("src/utils")
}
},
server: {
open: true // 是否自动打开浏览器
}
})
import { defineConfig } from "vite"
import vue from "@vitejs/plugin-vue"
import { resolve } from "path"
import Icons from "unplugin-icons/vite"
import IconsResolver from "unplugin-icons/resolver"
import AutoImport from "unplugin-auto-import/vite"
import Components from "unplugin-vue-components/vite"
import { ElementPlusResolver } from "unplugin-vue-components/resolvers"
import Pages from "vite-plugin-pages"
export default defineConfig({
base: "./", // 根路径
// 全局加载的scss文件
css: {
preprocessorOptions: {
scss: {
additionalData: `@use "src/assets/css/element-plus.scss" as *;`,
charset: false
}
}
},
plugins: [
// 识别vue
vue(),
Pages({
// 自动读取src/views下的vue文件,生成路由信息,默认路由路径'/‘
dirs: [{ dir: "src/views", baseRoute: "/" }],
// 异步方式加载路由组件
importMode: "async"
// 遍历路由信息,给默认路由加一个redirect
// extendRoute(route) {
// if (route.path === "/") return { ...route, redirect: "login" }
// }
}),
// 自动导入vue3中composition api函数
AutoImport({
include: [/\.vue$/, /\.vue\?vue/], // 作用于所有vue文件
dts: "src/auto-import.d.ts", // 生成全局的vue函数的typescript定义
imports: ["vue", "vue-router", "vuex"], // vue和vue-router都自动导入
resolvers: [
// 自动导入element-plus函数,如message
ElementPlusResolver(),
// 自动导入图标组件
IconsResolver({
prefix: "Icon"
})
]
}),
// 自动按需导入element-plus组件
Components({
dts: "src/element-plus-auto-import.d.ts",
// 自动注册图标组件
resolvers: [
IconsResolver({
enabledCollections: ["ep"]
}),
ElementPlusResolver({
importStyle: "sass"
})
]
}),
// 自动下载
Icons({
autoInstall: true
})
],
// 路径别名
resolve: {
alias: {
"@": resolve("src"),
"~@assets": resolve(__dirname, "src/assets"),
"@utils": resolve("src/utils")
}
},
server: {
open: true // 是否自动打开浏览器
}
})
使用
<i-ep-add-location />
<i-ep-add-location />
暗黑主题
main.js中导入
import "element-plus/theme-chalk/dark/css-vars.css"
import "element-plus/theme-chalk/dark/css-vars.css"
html使用class="dark"
配置vxe-table
import { defineConfig } from "vite"
import vue from "@vitejs/plugin-vue"
import Components from "unplugin-vue-components/vite"
import { createStyleImportPlugin, VxeTableResolve } from "vite-plugin-style-import"
export default defineConfig({
plugins: [
vue(),
Components({
// 配置自动注册vxe-table组件
resolvers: [
componentName => {
if (componentName.startsWith("Vxe")) return { name: componentName.slice(3), from: "vxe-table" }
}
]
}),
// 配置自动导入vxe-table组件样式
createStyleImportPlugin({
resolves: [VxeTableResolve()]
})
]
})
import { defineConfig } from "vite"
import vue from "@vitejs/plugin-vue"
import Components from "unplugin-vue-components/vite"
import { createStyleImportPlugin, VxeTableResolve } from "vite-plugin-style-import"
export default defineConfig({
plugins: [
vue(),
Components({
// 配置自动注册vxe-table组件
resolvers: [
componentName => {
if (componentName.startsWith("Vxe")) return { name: componentName.slice(3), from: "vxe-table" }
}
]
}),
// 配置自动导入vxe-table组件样式
createStyleImportPlugin({
resolves: [VxeTableResolve()]
})
]
})
综合
npm i -s element-plus vue-router vuex xe-utils vxe-table echarts vue-echarts nprogress axios
npm i -s element-plus vue-router vuex xe-utils vxe-table echarts vue-echarts nprogress axios
npm i -D unplugin-vue-components sass sass-loader postcss-pxtorem
npm i -D unplugin-vue-components sass sass-loader postcss-pxtorem
创建
import { defineConfig } from "vite"
import vue from "@vitejs/plugin-vue"
import { resolve } from "path"
import Components from "unplugin-vue-components/vite"
import { ElementPlusResolver } from "unplugin-vue-components/resolvers"
export default defineConfig({
base: "./", // 根路径
// 全局加载scss文件
css: {
preprocessorOptions: {
scss: {
additionalData: `@use "src/assets/css/element-plus.scss" as *;`,
charset: false
}
}
},
plugins: [
// 识别vue
vue(),
// 自动按需导入element-plus组件
Components({
dirs: ["src/components"], // 要导入组件的目录路径
extensions: ["vue"],
deep: true, // 搜索子目录
dts: false, // 不使用ts
include: [/\.vue$/, /\.vue\?vue/], // 只识别vue文件
resolvers: [
ElementPlusResolver({
importStyle: "sass"
})
]
})
],
resolve: {
// 路径别名
alias: {
"@": resolve(__dirname, "src"),
"~@assets": resolve(__dirname, "src/assets"),
"@utils": resolve(__dirname, "src/utils")
}
},
server: {
// 设置代理
// proxy: {
// "/tzMessageManage": "http://192.168.1.236:10007"
// },
port: 9005, // 端口号
open: true // 是否自动打开浏览器
}
})
import { defineConfig } from "vite"
import vue from "@vitejs/plugin-vue"
import { resolve } from "path"
import Components from "unplugin-vue-components/vite"
import { ElementPlusResolver } from "unplugin-vue-components/resolvers"
export default defineConfig({
base: "./", // 根路径
// 全局加载scss文件
css: {
preprocessorOptions: {
scss: {
additionalData: `@use "src/assets/css/element-plus.scss" as *;`,
charset: false
}
}
},
plugins: [
// 识别vue
vue(),
// 自动按需导入element-plus组件
Components({
dirs: ["src/components"], // 要导入组件的目录路径
extensions: ["vue"],
deep: true, // 搜索子目录
dts: false, // 不使用ts
include: [/\.vue$/, /\.vue\?vue/], // 只识别vue文件
resolvers: [
ElementPlusResolver({
importStyle: "sass"
})
]
})
],
resolve: {
// 路径别名
alias: {
"@": resolve(__dirname, "src"),
"~@assets": resolve(__dirname, "src/assets"),
"@utils": resolve(__dirname, "src/utils")
}
},
server: {
// 设置代理
// proxy: {
// "/tzMessageManage": "http://192.168.1.236:10007"
// },
port: 9005, // 端口号
open: true // 是否自动打开浏览器
}
})