vue3.0+vite+router搭建项目(三):配置vite.config.js

news/2024/11/15 21:41:56/

前言:上一篇文章中,我们已经讲解了项目搭建的方法以及过程总出现bug的解决方法。这篇文章主要讲解一下配置。

一、vite 配置别名

使用编辑器打开搭建号的项目 进入配置文件 vite.config.js。

import { defineConfig } from 'vite'import vue from '@vitejs/plugin-vue'
// https://vitejs.dev/config/export default defineConfig({  plugins: [vue()]})

别名配置后:

import { defineConfig } from 'vite'import vue from '@vitejs/plugin-vue'import path from 'path'const resolve = (dir: string) => path.join(__dirname, dir)
// https://vitejs.dev/config/export default defineConfig({  plugins: [vue()],  resolve: {    alias: {      '@': resolve('src'),      comps: resolve('src/components'),      apis: resolve('src/apis'),      views: resolve('src/views'),      utils: resolve('src/utils'),      routes: resolve('src/routes'),      styles: resolve('src/styles')    }  }})

这里就可以随意配置别名了,跟 webpack 差不多。

 二、vite 配置服务

这里配置成了 3088 端口,proxy 配置代理服务​​​​​​​

export default defineConfig({  plugins: [vue()],  resolve: {    alias: {      '@': resolve('src'),      comps: resolve('src/components'),      apis: resolve('src/apis'),      views: resolve('src/views'),      utils: resolve('src/utils'),      routes: resolve('src/routes'),      styles: resolve('src/styles')    }  },  server: {    //服务器主机名    host: '',    //端口号    port: 3088,    //设为 true 时若端口已被占用则会直接退出,而不是尝试下一个可用端口    strictPort: false,    //服务器启动时自动在浏览器中打开应用程序,当此值为字符串时,会被用作 URL 的路径名    open: false,    //自定义代理规则    proxy: {      // 选项写法      '/api': {        target: 'http://jsonplaceholder.typicode.com',        changeOrigin: true,        rewrite: path => path.replace(/^\/api/, '')      }    }  }})

三、实现 Icon 组件

在 webpack 中 svg-sprite-loader 插件可以很好的自定义自己的 Icon 组件,但是需要使用到 require.context 等相关 API,在 vite 中则有所不用。

  • 添加 svg 文件

    在 src/assets 目录下新建 icons 和 icons/svg 目录, 再在 svg 下新建 bug.svg 文件,并写入:

<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg">  <path    d="M127.88 73.143c0 1.412-.506 2.635-1.518 3.669-1.011 1.033-2.209 1.55-3.592 1.55h-17.887c0 9.296-1.783 17.178-5.35 23.645l16.609 17.044c1.011 1.034 1.517 2.257 1.517 3.67 0 1.412-.506 2.635-1.517 3.668-.958 1.033-2.155 1.55-3.593 1.55-1.438 0-2.635-.517-3.593-1.55l-15.811-16.063a15.49 15.49 0 0 1-1.196 1.06c-.532.434-1.65 1.208-3.353 2.322a50.104 50.104 0 0 1-5.192 2.974c-1.758.87-3.94 1.658-6.546 2.364-2.607.706-5.189 1.06-7.748 1.06V47.044H58.89v73.062c-2.716 0-5.417-.367-8.106-1.102-2.688-.734-5.003-1.631-6.945-2.692a66.769 66.769 0 0 1-5.268-3.179c-1.571-1.057-2.73-1.94-3.476-2.65L33.9 109.34l-14.611 16.877c-1.066 1.14-2.344 1.711-3.833 1.711-1.277 0-2.422-.434-3.434-1.304-1.012-.978-1.557-2.187-1.635-3.627-.079-1.44.333-2.705 1.236-3.794l16.129-18.51c-3.087-6.197-4.63-13.644-4.63-22.342H5.235c-1.383 0-2.58-.517-3.592-1.55S.125 74.545.125 73.132c0-1.412.506-2.635 1.518-3.668 1.012-1.034 2.21-1.55 3.592-1.55h17.887V43.939L9.308 29.833c-1.012-1.033-1.517-2.256-1.517-3.669 0-1.412.505-2.635 1.517-3.668 1.012-1.034 2.21-1.55 3.593-1.55s2.58.516 3.593 1.55l13.813 14.106h67.396l13.814-14.106c1.012-1.034 2.21-1.55 3.592-1.55 1.384 0 2.581.516 3.593 1.55 1.012 1.033 1.518 2.256 1.518 3.668 0 1.413-.506 2.636-1.518 3.67l-13.814 14.105v23.975h17.887c1.383 0 2.58.516 3.593 1.55 1.011 1.033 1.517 2.256 1.517 3.668l-.005.01zM89.552 26.175H38.448c0-7.23 2.489-13.386 7.466-18.469C50.892 2.623 56.92.082 64 .082c7.08 0 13.108 2.541 18.086 7.624 4.977 5.083 7.466 11.24 7.466 18.469z"  /></svg>

  • 处理 svg 文件插件

    在 scr 目录下新建 plugins 文件夹,并新建 svgBuilder.js 文件

import { readFileSync, readdirSync } from 'fs'
let idPerfix = ''const svgTitle = /<svg([^>+].*?)>/const clearHeightWidth = /(width|height)="([^>+].*?)"/g
const hasViewBox = /(viewBox="[^>+].*?")/g
const clearReturn = /(\r)|(\n)/g
function findSvgFile(dir) {  const svgRes = []  const dirents = readdirSync(dir, {    withFileTypes: true  })  for (const dirent of dirents) {    if (dirent.isDirectory()) {      svgRes.push(...findSvgFile(dir + dirent.name + '/'))    } else {      const svg = readFileSync(dir + dirent.name)        .toString()        .replace(clearReturn, '')        .replace(svgTitle, ($1, $2) => {          // console.log(++i)          // console.log(dirent.name)          let width = 0          let height = 0          let content = $2.replace(clearHeightWidth, (s1, s2, s3) => {            if (s2 === 'width') {              width = s3            } else if (s2 === 'height') {              height = s3            }            return ''          })          if (!hasViewBox.test($2)) {            content += `viewBox="0 0 ${width} ${height}"`          }          return `<symbol id="${idPerfix}-${dirent.name.replace('.svg', '')}" ${content}>`        })        .replace('</svg>', '</symbol>')      svgRes.push(svg)    }  }  return svgRes}
export const svgBuilder = (path, perfix = 'icon') => {  if (path === '') return  idPerfix = perfix  const res = findSvgFile(path)  // console.log(res.length)  // const res = []  return {    name: 'svg-transform',    transformIndexHtml(html) {      return html.replace(        '<body>',        `          <body>            <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="position: absolute; width: 0; height: 0">              ${res.join('')}            </svg>        `      )    }  }}

  • 使用 svg 插件

    在 vite.config.ts 中导入并在 plugins 中注册

​​​​​​​

  import { svgBuilder } from './src/plugins/svgBuilder';  //...  plugins: [    vue(),    [svgBuilder('./src/assets/icons/svg/')] // 这里已经将src/icons/svg/下的svg全部导入,无需再单独导入  ],

到此插件已经完成,想要直接通过 svg-icon 便签形式使用组件还需要完善 SvgIcon 组件

  • SvgIcon 组件注册

    在 scr/components 目录下新建 SvgIcon/index.vue 文件

<template>  <svg :class="svgClass" aria-hidden="true" v-on="$attrs">    <use :xlink:href="iconName" />  </svg></template>
<script lang="ts">import { defineComponent, computed } from 'vue'
interface Props {  iconClass: string  className: string}
export default defineComponent({  name: 'SvgIcon',  props: {    iconClass: {      type: String,      required: true    },    className: {      type: String,      default: () => ''    }  },  setup(props: Props) {    const iconName = computed((): string => `#icon-${props.iconClass}`)    const svgClass = computed((): string => {      if (props.className) {        return 'svg-icon ' + props.className      } else {        return 'svg-icon'      }    })
    return {      iconName,      svgClass    }  }})</script>
<style scoped>.svg-icon {  width: 1em;  height: 1em;  vertical-align: -0.15em;  fill: currentColor;  overflow: hidden;}</style>

main.js 文件引入并注册

import SvgIcon from './components/SvgIcon/index.vue'

createApp(App).component('svg-icon', SvgIcon).mount('#app')

在 App.vue 中测试

至此完成后,就可以在界面上看见小爬虫图标.

最后,感谢您的阅读。

你学到了什么,欢迎补充!!

欢迎大家留言讨论,祝工作顺利、生活愉快!

    vue3.0+vite+router搭建项目(二):配置相关依赖

  • vue3.0+vite+router搭建项目

  • VueFastDev - 前端快速开发工具 (升级表格配置)

  • VueFastDev - 前端快速开发工具 (更新树形选择器)

  • VueFastDev - 前端快速开发工具


http://www.ppmy.cn/news/174782.html

相关文章

6---6

#include<stdio.h>int main(void) {int number;printf("Please enter a number:");scanf_s("%d", &number);for (int i 2; i * i < number; i){if ((i * i) % 2 0){printf("%d\n", i * i);}}return 0; }

【概率论基础进阶】随机事件和概率-古典概型与伯努利概型

文章目录 一、古典概型二、几何概型三、伯努利概型 一、古典概型 定义&#xff1a;当试验结果为有限 n n n个样本点&#xff0c;且每个样本点的发生具有相等的可能性&#xff0c;如果事件 A A A由 n A n_{A} nA​个样本点组成&#xff0c;则事件 A A A的概率 P ( A ) n A n …

Oracle 自带性能诊断工具介绍

statspack Oracle Statspack 工具从 Oracle 8.1.6 开始引入&#xff0c;通过 Statspack 可以很容易地收集数据库性能数据&#xff0c;并通过这些数据进而分析确定 Oracle 数据库的瓶颈所在。该工具9i 必用,10g,11g,12c 兼容&#xff0c;后期awr出来后&#xff0c;Oracle 建议…

NTU-RGBD骨架数据分析

参考文献&#xff1a; NTU RGBD动作识别数据集 NTU-RGBD骨架数据分析 NTU-RGBD Dataset NTU RGB D动作识别数据集由56,880个动作样本组成&#xff0c;包含每个样本的RGB视频&#xff0c;深度图序列&#xff0c;3D骨架数据和红外视频。此数据集由3个Microsoft Kinect v.2相…

matlab读取多个文件 tecplot格式数据

平常程序输出的文件格式是.dat 一般用tecplot打开&#xff0c;画些云图&#xff0c;但是原始的数据有时候需要进行处理或者截取&#xff0c;就需要用matlab处理一下&#xff0c;附上我常用的风场文件读取处理程序。 文件格式&#xff1a;第一列x位置&#xff0c;第二列y位置&…

如何计算带有字母的高阶行列式?

这样的矩阵行列式&#xff1a; 肯定不是手算 可以借助Matlab 带有字母的矩阵就是符号矩阵&#xff0c;也就是说如何计算符号矩阵的行列式&#xff1f; syms a11 a12 a13 a14 a21 a22 a23 a25 a31 a32 a33 a36 a41 a44 a45 a46 a52 a54 a55 a56 a63 a64 a65 a66 A [a11 a12 …

超神之路 数据结构 3 —— Stack栈实现及应用

栈也是一种线性表结构&#xff0c;相较于数组&#xff0c;栈对应的操作是数组的子集&#xff0c;我们只要实现从一端添加元素&#xff0c;并从这个一端取出元素&#xff0c;这一端我们称呼它为栈顶&#xff0c;正是由于这种结构&#xff0c;它具有“后入先出”&#xff08;LIFO…

Keil综合(01)一些常见文件类型的作用和功能说明

相关标题&#xff1a; Keil中.uvmpw、.uvprojx、.uvproj、.uvoptx、.uvopt的意思是什么&#xff1f; Keil中.d .o .axf .elf这些文件可以删除吗&#xff1f; 前言 看着一大堆文件舒服吗&#xff1f; 相信大部分朋友看见过类似上图“凌乱”的现象。工程文件和编译过程文件杂乱放…