当前位置:   article > 正文

vite插件_vite-plugin-imagemin

vite-plugin-imagemin
  1. vite-plugin-restart

通过监听文件修改,自动重启 vite 服务。

最常用的场景就是监听 vite.config.js 和 .env.development 文件,我们知道,修改 vite 配置文件和环境配置文件,是需要重启 vite 才会生效,通过这个插件,我们将从反复重启中解脱出来。

安装

npm i vite-plugin-restart -D

配置:vite.config.ts

  1. import ViteRestart from 'vite-plugin-restart'
  2. export default {
  3.   plugins: [
  4.     ViteRestart({
  5.       restart: [
  6.         'my.config.[jt]s',
  7.       ]
  8.     })
  9.   ],
  10. };
  1. unplugin-vue-components

组件自动按需导入。

安装:

npm i unplugin-vue-components -D

vite.config.ts

  1. import Components from 'unplugin-vue-components/vite'
  2. // ui库解析器,也可以自定义,需要安装相关UI库,unplugin-vue-components/resolvers
  3. // 提供了以下集中解析器,使用的时候,需要安装对应的UI库,这里以vant示例
  4. // 注释的是包含的其他一些常用组件库,供参考
  5. import {
  6.   // ElementPlusResolver,
  7.   // AntDesignVueResolver,
  8.   VantResolver,
  9.   // HeadlessUiResolver,
  10.   // ElementUiResolver
  11. } from 'unplugin-vue-components/resolvers'
  12. export default  ({ mode }) => defineConfig({
  13.   plugins: [
  14.     Components({
  15.       dirs: ['src/components'], // 目标文件夹
  16.       extensions: ['vue','jsx'], // 文件类型
  17.       dts: 'src/components.d.ts', // 输出文件,里面都是一些import的组件键值对
  18.       // ui库解析器,也可以自定义,需要安装相关UI库
  19.       resolvers: [
  20.         VantResolver(),
  21.         // ElementPlusResolver(),
  22.         // AntDesignVueResolver(),
  23.         // HeadlessUiResolver(),
  24.         // ElementUiResolver()
  25.       ],
  26.     })
  27.   ]
  28. })

原先引用组件的时候需要在目标文件里面import相关组件,现在就可以直接使用无需在目标文件import了,注意大小写,组件都是大写开始的。

  1. vite-plugin-style-import

当你使用unplugin-vue-components来引入ui库的时候,message, notification,toast 等引入样式不生效。

安装vite-plugin-style-import,实现message, notification,toast 等引入样式自动引入

安装:

npm i vite-plugin-style-import -D

vite.config.ts

  1. import styleImport, {
  2.   // AndDesignVueResolve,
  3.   VantResolve,
  4.   // ElementPlusResolve,
  5.   // NutuiResolve,
  6.   // AntdResolve
  7. } from 'vite-plugin-style-import'
  8. export default  ({ mode }) => defineConfig({
  9.   plugins: [
  10.     styleImport({
  11.       resolves: [
  12.         // AndDesignVueResolve(),
  13.         VantResolve(),
  14.         // ElementPlusResolve(),
  15.         // NutuiResolve(),
  16.         // AntdResolve()
  17.       ],
  18.     })
  19.   ]
  20. })

注释部分为常用的UI组件库,按照自己的需要引入。

  1. unplugin-auto-import

vue3等插件 hooks 自动引入

支持vue, vue-router, vue-i18n, @vueuse/head, @vueuse/core等自动引入

效果

  1. // 引入前
  2. import { ref, computed } from 'vue'
  3. const count = ref(0)
  4. const doubled = computed(() => count.value * 2)
  5. //引入后
  6. const count = ref(0)
  7. const doubled = computed(() => count.value * 2)

安装

npm i unplugin-auto-import -D

vite.config.ts

  1. import AutoImport from 'unplugin-auto-import/vite'
  2. export default  ({ mode }) => defineConfig({
  3.   plugins: [
  4.     AutoImport({
  5.       imports: ['vue', 'vue-router', 'vuex', '@vueuse/head'],
  6.       // 可以选择auto-import.d.ts生成的位置,使用ts建议设置为'src/auto-import.d.ts'
  7.       dts: 'src/auto-import.d.ts'
  8.     }),
  9.   ]
  10. })
  1. vite-plugin-svg-icons

用于生成 svg 雪碧图,方便在项目中使用 .svg 文件。

按照文档配置好后,搭配阿里巴巴矢量图标库使用,只需把下载好的 svg 文件丢到指定目录,然后就可以项目中愉快的使用了。

安装:

npm i vite-plugin-svg-icons -D

vite.config.ts配置

  1. import { defineConfig,loadEnv } from 'vite'
  2. import {createSvgIconsPlugin} from 'vite-plugin-svg-icons';
  3. const path = require("path");
  4. export default  ({ mode }) => defineConfig({
  5.   plugins: [
  6.     vue(),
  7.     createSvgIconsPlugin({
  8.       // Specify the icon folder to be cached
  9.       iconDirs: [path.resolve(process.cwd(), 'src/svg')],
  10.       // Specify symbolId format
  11.       symbolId: 'icon-[dir]-[name]'
  12.     })
  13.   ]
  14. })

main.ts添加

import 'virtual:svg-icons-register'

新建svgIcon.vue

  1. <template>
  2.   <svg class="svg-icon" aria-hidden="true">
  3.     <use :href="symbolId" />
  4.   </svg>
  5. </template>
  6. <script setup lang="ts" name="SvgIcon">
  7.   import { computed } from 'vue'
  8.   const props = defineProps({
  9.     prefix: {
  10.       type: String,
  11.       default: 'icon'
  12.     },
  13.     name: {
  14.       type: String,
  15.       required: true
  16.     },
  17.   })
  18.   const symbolId = computed(() => `#${props.prefix}-${props.name}`)
  19. </script>
  20. <style scope>
  21.   .svg-icon {
  22.     width: 1em;
  23.     height: 1em;
  24.     vertical-align: -0.1em; /* 因icon大小被设置为和字体大小一致,而span等标签的下边缘会和字体的基线对齐,故需设置一个往下的偏移比例,来纠正视觉上的未对齐效果 */
  25.     fill: currentColor; /* 定义元素的颜色,currentColor是一个变量,这个变量的值就表示当前元素的color值,如果当前元素未设置color值,则从父元素继承 */
  26.     overflow: hidden;
  27.   }
  28. </style>

在目录src下新建svg文件夹,在阿里巴巴矢量图标库 下载order.svg图标,放入svg文件夹内。

使用:

  1. <template>
  2.   <div class="home">
  3.     <svg-icon name="order" class="icon"></svg-icon>
  4.   </div>
  5. </template>
  6. <script setup lang="ts">
  7. // 示例使用了unplugin-vue-components/vite插件自动引入自定义组件
  8. </script>
  9. <style lang="less" scoped>
  10. .icon{
  11.   font-size: 200px;
  12.   color: #ff0000;
  13. }
  14. </style>
  1. vite-plugin-html

一个针对 index.html,提供压缩和基于 ejs 模板功能的 vite 插件。

通过搭配 .env 文件,可以在开发或构建项目时,对 index.html 注入动态数据,例如替换网站标题。

安装:

npm i vite-plugin-html -D

index.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3.   <head>
  4.     <meta charset="UTF-8" />
  5.     <link rel="icon" href="./favicon.ico" />
  6.     <link rel="stylesheet" href="./public/reset.css">
  7.     <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
  8.     <title><%- title %></title>
  9.   </head>
  10.   <body>
  11.     <div id="app"></div>
  12.     <%- injectScript %>
  13.   </body>
  14. </html>

vite.config.ts

  1. import { defineConfig,loadEnv} from 'vite'
  2. import { createHtmlPlugin } from 'vite-plugin-html'
  3. export default  ({ mode }) => defineConfig({
  4.     // mode 环境变量名,若配置有.env.test,启动时 --mode test,这里的mode就是test
  5.   plugins: [
  6.     createHtmlPlugin({
  7.       minify: true,
  8.       /**
  9.        * 在这里写entry后,你将不需要在`index.html`内添加 script 标签,原有标签需要删除
  10.        * @default src/main.ts
  11.        */
  12.       entry: '/src/main.ts',
  13.       /**
  14.        * 需要注入 index.html ejs 模版的数据
  15.        */
  16.       inject: {
  17.         data: {
  18.           // 查找.env.test文件里面的VITE_PROJECT_TITLE,请以VITE_标识开头
  19.           title: loadEnv(mode, process.cwd()).VITE_PROJECT_TITLE, 
  20.           injectScript: `<script src="/inject.js"></script>`,
  21.         },
  22.       },
  23.     })
  24.   ]
  25. })
  1. vite-plugin-compression

使用 gzip 或者 brotli 来压缩资源。

安装

npm i vite-plugin-compression -D

vite.config.ts

  1. import { defineConfig,loadEnv} from 'vite'
  2. import viteCompression from 'vite-plugin-compression';
  3. export default  ({ mode }) => defineConfig({
  4.   plugins: [
  5.     viteCompression()
  6.   ]
  7. })
  1. vite-plugin-imagemin

打包压缩图片

安装

npm i vite-plugin-imagemin -D

国内用户安装需要在电脑host文件(C:\Windows\System32\drivers\etc)上加下以下配置:

199.232.4.133 raw.githubusercontent.com

  1. import { defineConfig,loadEnv} from 'vite'
  2. import viteImagemin from 'vite-plugin-imagemin'
  3. export default  ({ mode }) => defineConfig({
  4.   plugins: [
  5.     viteImagemin({
  6.       gifsicle: { // gif图片压缩
  7.         optimizationLevel: 3, // 选择13之间的优化级别
  8.         interlaced: false, // 隔行扫描gif进行渐进式渲染
  9.         // colors: 2 // 将每个输出GIF中不同颜色的数量减少到num或更少。数字必须介于2256之间。
  10.       },
  11.       optipng: { // png
  12.         optimizationLevel: 7, // 选择07之间的优化级别
  13.       },
  14.       mozjpeg: {// jpeg
  15.         quality: 20, // 压缩质量,范围从0(最差)到100(最佳)。
  16.       },
  17.       pngquant: {// png
  18.         quality: [0.8, 0.9], // Min和max是介于0(最差)到1(最佳)之间的数字,类似于JPEG。达到或超过最高质量所需的最少量的颜色。如果转换导致质量低于最低质量,图像将不会被保存。
  19.         speed: 4, // 压缩速度,1(强力)到11(最快)
  20.       },
  21.       svgo: { // svg压缩
  22.         plugins: [
  23.           {
  24.             name: 'removeViewBox',
  25.           },
  26.           {
  27.             name: 'removeEmptyAttrs',
  28.             active: false,
  29.           },
  30.         ],
  31.       },
  32.     }),
  33.   ]
  34. })
  1. vite-plugin-purge-icons

此插件是可以让我们很方便高效的使用Iconify中所有的图标(本人表示没有用过…)。

  1. @vitejs/plugin-vue-jsx

此插件支持在vue3中使用jsx/tsx语法

安装

npm i @vitejs/plugin-vue-jsx

vite.config.ts

  1. import { defineConfig,loadEnv} from 'vite'
  2. import vuejsx from "@vitejs/plugin-vue-jsx"
  3. export default  ({ mode }) => defineConfig({
  4.   plugins: [
  5.     vuejsx()
  6.   ]
  7. })

jsx文件:
(jsx组件中自动跳过生命周期,即jsx中没有生命周期,在父组件onBeforeMount后执行)

  1. const component = (props:any,context:any) => {
  2.   console.log(props)
  3.   const onClick = () =>
  4.     context.emit('update')
  5.   }
  6.   return <div
  7.     style={{
  8.       fontSize: 12,
  9.       color: '#999'
  10.     }}
  11.     onClick={()=>onClick()}
  12.   >
  13.     我是jsx函数组件{props.text}
  14.   </div>
  15. }
  16. export default component

vite-plugin-vue-setup-extend

setup语法糖name增强,使vue3语法糖支持name属性。

vue3语法糖默认是没有name属性的,在我们使用keep-alive的时候需要用到name。

安装

npm i vite-plugin-vue-setup-extend -D

vite.config.ts

  1. import { defineConfig} from 'vite'
  2. import vueSetupExtend from 'vite-plugin-vue-setup-extend'
  3. export default  ({ mode }) => defineConfig({
  4.   plugins: [
  5.     vueSetupExtend()
  6.   ]
  7. })

使用

<script setup lang="ts" name="home"></script>

vitejs-plugin-legacy

Vite默认的浏览器支持基线是原生ESM。该插件为不支持原生ESM的传统浏览器提供支持。

@vitejs/plugin-vue

vite支持vue开发

vite-plugin-vue-images

自动导入图像,同级目录的文件名不能重复!

安装

npm i vite-plugin-vue-images -D

vite.config.ts

  1. import { defineConfig,loadEnv} from 'vite'
  2. import ViteImages from 'vite-plugin-vue-images'
  3. export default  ({ mode }) => defineConfig({
  4.   plugins: [
  5.     ViteImages({
  6.       dirs: ['src/assets'], // 图像目录的相对路径
  7.       extensions: ['jpg', 'jpeg', 'png', 'svg', 'webp'], // 有效的图像扩展
  8.       customResolvers:[], // 覆盖名称->图像路径解析的默认行为
  9.       customSearchRegex: '([a-zA-Z0-9]+)', // 重写搜索要替换的变量的Regex。
  10.     }),
  11.   ]
  12. })

假设有以下文件及路径

logo.png: src/assets/logo.png

name1.jpg: src/assets/test/name1.jpg

使用方式:

  1. <template>
  2.   <div class="home">
  3.     <img :src="Logo"  />
  4.     <img :src="TestName1"  /> 
  5.   </div>
  6. </template>
  7. <script setup lang="ts"></script>
  8. <style lang="less" scoped></style>

插件将转换为:

  1. <template>
  2.   <div class="home">
  3.     <img :src="Logo"  />
  4.     <img :src="TestName1"  /> 
  5.   </div>
  6. </template>
  7. <script setup lang="ts">
  8. import Logo from '@/assets/logo.png'
  9. import TestName1 from '@/assets/test/name1.jpg'
  10. </script>
  11. <style lang="less" scoped></style>

 vue-global-api

unplugin-auto-import插件的继承者,解决因为它的自动导入导致的eslint报错

安装

npm i vue-global-api

main.ts添加

import 'vue-global-api'

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/392822
推荐阅读
相关标签
  

闽ICP备14008679号