vite2 vue3 加载svg 图片
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88import { readFileSync, readdirSync } from 'fs' const path = require('path') const svgTitle = /<svg([^>+].*?)>/ const clearHeightWidth = /(width|height)="([^>+].*?)"/g const hasViewBox = /(viewBox="[^>+].*?")/g const clearReturn = /(r)|(n)/g /** * @Date 2021/11/22 * @Author Varus * @Description: 找到svg 图片并且替换文件信息 * @param dir svg 目录 * @param idPreFix svg symbol id * */ function findSvgFile(dir, idPreFix) { const svgRes = [] const dirEntries = readdirSync(dir, { withFileTypes: true }) for (const dirent of dirEntries) { if (dirent.isDirectory()) { svgRes.push(...findSvgFile(path.join(dir, dirent.name))) } else { const svg = readFileSync(path.join(dir, dirent.name)) .toString() .replace(clearReturn, '') .replace(svgTitle, ($1, $2) => { let width = 0 let height = 0 let content = $2.replace( clearHeightWidth, (s1, s2, s3) => { s3 = s3.replace('px', '') 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="${idPreFix}-${dirent.name.replace( '.svg', '' )}" ${content}>` }) .replace('</svg>', '</symbol>') svgRes.push(svg) } } return svgRes } /** * @Date 2021/11/18 * @Author Varus * @Description: 加载svg 文件 * */ export default function (path, prefix = 'icon') { if (path === '') return const res = findSvgFile(path, prefix) // console.log(res) return { name: 'svg-transform', // vite 插件 直接替换 html 页签内容 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> ` ) } } }
引入
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import svgLoader from './src/plugins/svg-loader' const path = require('path') function resolve (dir) { return path.join(__dirname, dir) } const setting = require('./src/setting.js') export default defineConfig({ resolve: { alias:{ '@': path.resolve(__dirname, "src") }, }, server: { fs: { strict: false }, }, plugins: [vue(), svgLoader(resolve('src/icons/svg/'))] })
引用以下以下问题ISSUE
相关的git :https://github.com/JetBrains/svg-sprite-loader/issues/434
最后
以上就是积极高山最近收集整理的关于vite svg 插件的全部内容,更多相关vite内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复