Vue3+Vite+ts 从零开发前端 – 5 – 插件配置
本文最后更新于 296 天前,如有失效请评论区留言。

插件使用

在项目根目录下创建一个 config 目录,这里用来放置项目配置相关的内容。例如 vite 的插件都可以放在这里

新建 index.ts,这个是插件的主配置

import type { Plugin } from 'vite';
import vue from '@vitejs/plugin-vue';
import {configSvgIconsPlugin} from "./svgIcons";
import {configUnocssPlugin} from "./unocss.ts";
import {createAutoImportPlugin} from "./autoImport.ts";
import {createComponentsPlugin} from "./component.ts";

export function createVitePlugins(isBuild: boolean) {
  const vitePlugins: (Plugin | Plugin[])[] = [
    vue(),
  ];
  // auto import 自动导入插件
  vitePlugins.push(createAutoImportPlugin());
  // components 按需引入组件
  vitePlugins.push(createComponentsPlugin());
  // svg icons
  vitePlugins.push(configSvgIconsPlugin(isBuild));
  // unocss
  vitePlugins.push(configUnocssPlugin());

  return vitePlugins;
}

vite.config.ts 中引入即可

import {createVitePlugins} from './config/vite/plugins'

return {
  plugins: createVitePlugins(command === 'build'),
}

下面来逐个说明各个插件的使用

unplugin-auto-import

自动引入插件

pnpm add unplugin-auto-import -D

autoImport.ts 配置

/**  
 * 按需加载,自动引入依赖  
 */  

import AutoImport from 'unplugin-auto-import/vite'

export const createAutoImportPlugin = () => {
  return AutoImport({
    imports: [
      'vue',
      'vue-router',
      'pinia',
      {
        'naive-ui': ['useDialog', 'useMessage', 'useNotification', 'useLoadingBar']
      }
    ],
    dts: 'types/auto-imports.d.ts'
  })
}

dts 指定生成的 auto-imports.d.ts 文件路径,这里包含所有自动导入的依赖,该文件会自动生成

unplugin-vue-components

按需导入组件

pnpm add unplugin-vue-components -D

component.ts 配置

/**
 * 按需加载,自动引入组件
 */

import Components from 'unplugin-vue-components/vite'
import { NaiveUiResolver } from 'unplugin-vue-components/resolvers'

export const createComponentsPlugin = () => {
  return Components({
    // relative paths to the directory to search for components.
    dirs: ['src/components'],

    // valid file extensions for components.
    extensions: ['vue'],
    // search for subdirectories
    deep: true,
    // resolvers for custom components
    resolvers: [NaiveUiResolver()],

    // generate `components.d.ts` global declarations,
    // also accepts a path for custom filename
    // dts: false,
    dts: 'types/components.d.ts',

    // Allow subdirectories as namespace prefix for components.
    directoryAsNamespace: false,
    // Subdirectory paths for ignoring namespace prefixes
    // works when `directoryAsNamespace: true`
    globalNamespaces: [],

    // auto import for directives
    // default: `true` for Vue 3, `false` for Vue 2
    // Babel is needed to do the transformation for Vue 2, it's disabled by default for performance concerns.
    // To install Babel, run: `npm install -D @babel/parser @babel/traverse`
    directives: true,

    // filters for transforming targets
    include: [/\.vue$/, /\.vue\?vue/, /\.md$/],
    exclude: [/[\\/]node_modules[\\/]/, /[\\/]\.git[\\/]/, /[\\/]\.nuxt[\\/]/]
  })
}

svg icons

安装

pnpm add vite-plugin-svg-icons -D

svgIcons.ts 配置

import { createSvgIconsPlugin } from "vite-plugin-svg-icons"  
import path from 'path';  

export function configSvgIconsPlugin(isBuild: boolean) {  
  return createSvgIconsPlugin({  
    iconDirs: [path.resolve(process.cwd(), "/src/assets/icons")],  
    symbolId: "icon-[dir]-[name]",  
    svgoOptions: isBuild  
  })  
}

unocss

安装

pnpm add -D unocss

unocss.ts 插件

import Unocss from 'unocss/vite';  

export const configUnocssPlugin = () => {  
    return Unocss();  
};

unocss.config.ts 配置

import { defineConfig, presetAttributify, presetIcons, presetUno } from 'unocss';

export default defineConfig({
  exclude: ['node_modules', '.git', '.github', '.husky', '.vscode', 'build', 'dist', 'mock', 'public', './stats.html'],
  presets: [presetUno(), presetAttributify(), presetIcons()],
  shortcuts: [],
  rules: [],
  theme: {
    colors: {
      primary: 'var(--primary-color)',
      primary_hover: 'var(--primary-color-hover)',
      primary_pressed: 'var(--primary-color-pressed)',
      primary_active: 'var(--primary-color-active)',
      info: 'var(--info-color)',
      info_hover: 'var(--info-color-hover)',
      info_pressed: 'var(--info-color-pressed)',
      info_active: 'var(--info-color-active)',
      success: 'var(--success-color)',
      success_hover: 'var(--success-color-hover)',
      success_pressed: 'var(--success-color-pressed)',
      success_active: 'var(--success-color-active)',
      warning: 'var(--warning-color)',
      warning_hover: 'var(--warning-color-hover)',
      warning_pressed: 'var(--warning-color-pressed)',
      warning_active: 'var(--warning-color-active)',
      error: 'var(--error-color)',
      error_hover: 'var(--error-color-hover)',
      error_pressed: 'var(--error-color-pressed)',
      error_active: 'var(--error-color-active)',
    },
  },
});

使用的时候在 main.ts 中引入 uno.css

import 'uno.css';

postcss

使用这个插件需要安装一些东西

vite 内置的 css 处理器是 postcss,也是一种 css 预处理器,一般叫后置处理器,其实它能做很多事,非常强大,提供了各种插件,例如示例中使用字符处理插件 postcssPlugin: 'internal:charset-removal',这个是在引入 sass 时,对编译时可能出现的字符问题进行处理

安装 postcss

npm installl postcss@latest -D

安装 autoprefixer

npm install autoprefixer@latest -D

对于 postcss 的配置,也可以直接新建一个 postcss.config.js 来单独配置这块的选项

module.exports = {
  plugins: {
    autoprefixer: {}
  }
}
版权声明:除特殊说明,博客文章均为Gavin原创,依据CC BY-SA 4.0许可证进行授权,转载请附上出处链接及本声明。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇