vite:15个插件推荐

1. vite-plugin-restart

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

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

安装

npm i vite-plugin-restart -D

配置:vite.config.ts

import ViteRestart from 'vite-plugin-restart'
export default {
  plugins: [
    ViteRestart({
      restart: [
        'my.config.[jt]s',
      ]
    })
  ],
};

2. unplugin-vue-components

组件自动按需导入。

安装:

npm i unplugin-vue-components -D

vite.config.ts

import Components from 'unplugin-vue-components/vite'
// ui库解析器,也可以自定义,需要安装相关UI库,unplugin-vue-components/resolvers
// 提供了以下集中解析器,使用的时候,需要安装对应的UI库,这里以vant示例
// 注释的是包含的其他一些常用组件库,供参考
import {
  // ElementPlusResolver,
  // AntDesignVueResolver,
  VantResolver,
  // HeadlessUiResolver,
  // ElementUiResolver
} from 'unplugin-vue-components/resolvers'

export default  ({ mode }) => defineConfig({
  plugins: [
    Components({
      dirs: ['src/components'], // 目标文件夹
      extensions: ['vue','jsx'], // 文件类型
      dts: 'src/components.d.ts', // 输出文件,里面都是一些import的组件键值对
      // ui库解析器,也可以自定义,需要安装相关UI库
      resolvers: [
        VantResolver(),
        // ElementPlusResolver(),
        // AntDesignVueResolver(),
        // HeadlessUiResolver(),
        // ElementUiResolver()
      ],
    })
  ]
})

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

3. 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

import styleImport, {
  // AndDesignVueResolve,
  VantResolve,
  // ElementPlusResolve,
  // NutuiResolve,
  // AntdResolve
} from 'vite-plugin-style-import'


export default  ({ mode }) => defineConfig({
  plugins: [
    styleImport({
      resolves: [
        // AndDesignVueResolve(),
        VantResolve(),
        // ElementPlusResolve(),
        // NutuiResolve(),
        // AntdResolve()
      ],
    })
  ]
})

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

4. unplugin-auto-import

vue3等插件 hooks 自动引入

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

效果

// 引入前
import { ref, computed } from 'vue'
const count = ref(0)
const doubled = computed(() => count.value * 2)

//引入后
const count = ref(0)
const doubled = computed(() => count.value * 2)

安装

npm i unplugin-auto-import -D

vite.config.ts

import AutoImport from 'unplugin-auto-import/vite'
export default  ({ mode }) => defineConfig({
  plugins: [
    AutoImport({
      imports: ['vue', 'vue-router', 'vuex', '@vueuse/head'],
      // 可以选择auto-import.d.ts生成的位置,使用ts建议设置为'src/auto-import.d.ts'
      dts: 'src/auto-import.d.ts'
    }),
  ]
})

5. vite-plugin-svg-icons

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

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

安装:

npm i vite-plugin-svg-icons -D

vite.config.ts配置

import { defineConfig,loadEnv } from 'vite'
import {createSvgIconsPlugin} from 'vite-plugin-svg-icons';
const path = require("path");
export default  ({ mode }) => defineConfig({
  plugins: [
    vue(),
    createSvgIconsPlugin({
      // Specify the icon folder to be cached
      iconDirs: [path.resolve(process.cwd(), 'src/svg')],
      // Specify symbolId format
      symbolId: 'icon-[dir]-[name]'
    })
  ]
})

main.ts添加

import 'virtual:svg-icons-register'

新建svgIcon.vue

<template>
  <svg class="svg-icon" aria-hidden="true">
    <use :href="symbolId" />
  </svg>
</template>

<script setup lang="ts" name="SvgIcon">
  import { computed } from 'vue'
  const props = defineProps({
    prefix: {
      type: String,
      default: 'icon'
    },
    name: {
      type: String,
      required: true
    },
  })
  const symbolId = computed(() => `#${props.prefix}-${props.name}`)
</script>
<style scope>
  .svg-icon {
    width: 1em;
    height: 1em;
    vertical-align: -0.1em; /* 因icon大小被设置为和字体大小一致,而span等标签的下边缘会和字体的基线对齐,故需设置一个往下的偏移比例,来纠正视觉上的未对齐效果 */
    fill: currentColor; /* 定义元素的颜色,currentColor是一个变量,这个变量的值就表示当前元素的color值,如果当前元素未设置color值,则从父元素继承 */
    overflow: hidden;
  }
</style>

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

使用:

<template>
  <div class="home">
    <svg-icon name="order" class="icon"></svg-icon>
  </div>
</template>

<script setup lang="ts">
// 示例使用了unplugin-vue-components/vite插件自动引入自定义组件
</script>

<style lang="less" scoped>
.icon{
  font-size: 200px;
  color: #ff0000;
}
</style>

6. vite-plugin-html

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

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

安装:

npm i vite-plugin-html -D

index.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <link rel="icon" href="./favicon.ico" />
    <link rel="stylesheet" href="./public/reset.css">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
    <title><%- title %></title>
  </head>
  <body>
    <div id="app"></div>
    <%- injectScript %>
  </body>
</html>

vite.config.ts

import { defineConfig,loadEnv} from 'vite'
import { createHtmlPlugin } from 'vite-plugin-html'
export default  ({ mode }) => defineConfig({
    // mode 环境变量名,若配置有.env.test,启动时 --mode test,这里的mode就是test
  plugins: [
    createHtmlPlugin({
      minify: true,
      /**
       * 在这里写entry后,你将不需要在`index.html`内添加 script 标签,原有标签需要删除
       * @default src/main.ts
       */
      entry: '/src/main.ts',
      /**
       * 需要注入 index.html ejs 模版的数据
       */
      inject: {
        data: {
          // 查找.env.test文件里面的VITE_PROJECT_TITLE,请以VITE_标识开头
          title: loadEnv(mode, process.cwd()).VITE_PROJECT_TITLE, 
          injectScript: `<script src="/inject.js"></script>`,
        },
      },
    })
  ]
})

7. vite-plugin-compression

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

安装

npm i vite-plugin-compression -D

vite.config.ts

import { defineConfig,loadEnv} from 'vite'
import viteCompression from 'vite-plugin-compression';
export default  ({ mode }) => defineConfig({
  plugins: [
    viteCompression()
  ]
})

8. vite-plugin-imagemin

打包压缩图片

安装

npm i vite-plugin-imagemin -D

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

199.232.4.133 raw.githubusercontent.com

我自己安装的时候发现还是不行,然后还是选择了他不推荐的cnpm安装成功了- -

我发现我的4M图片压缩后,文件被旋转了90度,这?

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

9. vite-plugin-purge-icons

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

10. @vitejs/plugin-vue-jsx

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

安装

npm i @vitejs/plugin-vue-jsx

vite.config.ts

import { defineConfig,loadEnv} from 'vite'
import vuejsx from "@vitejs/plugin-vue-jsx"
export default  ({ mode }) => defineConfig({
  plugins: [
    vuejsx()
  ]
})

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

const component = (props:any,context:any) => {
  console.log(props)
  const onClick = () => { 
    context.emit('update')
  }
  return <div
    style={{
      fontSize: 12,
      color: '#999'
    }}
    onClick={()=>onClick()}
  >
    我是jsx函数组件{props.text}
  </div>
}

export default component

11. 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

import { defineConfig} from 'vite'
import vueSetupExtend from 'vite-plugin-vue-setup-extend'
export default  ({ mode }) => defineConfig({
  plugins: [
    vueSetupExtend()
  ]
}

使用

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

12. vitejs-plugin-legacy

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

13. @vitejs/plugin-vue

vite支持vue开发

14. vite-plugin-vue-images

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

安装

npm i vite-plugin-vue-images -D

vite.config.ts

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

假设有以下文件及路径

logo.png: src/assets/logo.png

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

使用方式:

<template>
  <div class="home">
    <img :src="Logo"  />
    <img :src="TestName1"  /> 
  </div>
</template>

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

<style lang="less" scoped>
</style>

插件将转换为:

<template>
  <div class="home">
    <img :src="Logo"  />
    <img :src="TestName1"  /> 
  </div>
</template>

<script setup lang="ts">
import Logo from '@/assets/logo.png'
import TestName1 from '@/assets/test/name1.jpg'
</script>

<style lang="less" scoped>
</style>

15. vue-global-api

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

安装

npm i vue-global-api

main.ts添加

import 'vue-global-api'
  • 15
    点赞
  • 106
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: [vite] 是一个现代化的前端构建工具,它的插件体系十分丰富。其中 [plugin:vite:css] 是用于处理 CSS 的插件,它提供了许多功能和特性。 而在使用 Vite 和 [plugin:vite:css] 进行开发的过程中,如果出现了 "undefined variable" 的错误,那么很有可能是因为在使用 [sass] 这个预处理器时,某些变量没有被正确定义。 解决这个问题的方法有几种: 首先,我们可以检查一下代码中是否正确引入了所需的 SCSS 文件。在使用 [sass] 的时候,我们通常是通过 `@import` 关键字来引入其他 SCSS 文件的。可能是在引入文件的时候存在错误,或者文件路径有问题导致无法正确引入。 另外,这个错误也可能是因为 SCSS 文件中定义的变量没有正确声明和赋值。确保你在使用变量之前,已经正确地定义了它们。可以使用 `$` 符号来定义变量,例如 `$primary-color: blue;`。然后在使用这个变量时,要确保它的作用域是正确的。 此外,在 [vite] 中,我们可以检查一下 [plugin:vite:css] 插件的配置是否正确。可以在 vite.config.js 文件中找到相关的配置选项,并确认是否有指定正确的参数信息。 最后,如果以上方法都没有解决问题,可以考虑更新 [vite] 和 [plugin:vite:css] 插件的版本,或者查看相关的官方文档和社区讨论,看是否有其他用户遇到过相似的问题,并有解决方法提供。 总之,"undefined variable" 错误通常是由于引入文件路径、变量定义和配置错误等问题导致的。通过检查这些方面,一般能够解决这个问题。 ### 回答2: [vite] [plugin:vite:css] [sass] undefined variable的错误通常是在使用vite构建工具时,使用了Sass预处理器,并且在样式文件中引用了未定义的变量。 在Sass中,我们可以定义变量来存储重复使用的值。当我们引用一个未定义的变量时,就会出现“undefined variable”错误。 为了解决这个问题,首先要确保在样式文件中使用的变量都被正确定义。可以通过在样式文件的顶部使用$variableName: value;语法来定义变量。 如果在样式文件中引用了其他文件中定义的变量,需要确保这些变量在当前文件中可见。可以通过@import语句将其他文件中的变量导入。 还有一种可能是,导入的文件中的变量并没有正确地使用或定义。需要检查所有导入的文件,确保其中的变量都被正确地定义和使用。 如果以上步骤都没有解决问题,那可能是vite的配置出了问题。可以检查vite.config.js文件,确保相关的插件和预处理器正确地配置。 总之,要解决[vite] [plugin:vite:css] [sass] undefined variable错误,需要确定变量是否正确定义,并检查导入的文件中是否正确使用了这些变量。也要确保vite的相关配置正确无误。 ### 回答3: 在使用Vite构建工具时,遇到[vite][plugin:vite:css][sass]undefined variable错误通常是由于在Sass文件中使用了未定义的变量导致的。 要解决这个错误,首先需要检查Sass文件中是否使用了正确的变量名。确保在使用变量之前,已经正确声明和定义了相应的变量。 其次,检查Sass文件是否正确导入了相关的文件或模块。如果变量定义在其他文件中,需要确保正确导入它们,以便在当前文件中能够使用。 另外,如果使用了插件[vite][plugin:vite:css]来处理CSS和Sass文件,需要确认插件已正确安装,并在配置文件中进行了正确的配置。可以检查package.json文件和vite.config.js文件来确认插件的安装和配置情况。 最后,如果以上步骤都没有解决问题,可以尝试重新安装插件和相关的依赖项,并确保使用的版本是兼容的。也可以尝试使用其他类似的构建工具或插件来替代,以解决相关的编译错误。 总之,要解决[vite][plugin:vite:css][sass]undefined variable错误,需要仔细检查Sass文件中的变量使用、文件导入和插件配置等方面,并确保依赖项的正确安装和版本兼容性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mosowe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值