Rumah hujung hadapan web tutorial js 在Webpack中如何加载SVG

在Webpack中如何加载SVG

Jun 15, 2018 pm 02:18 PM
webpack

本篇文章主要介绍了Webpack实战加载SVG的方法,现在分享给大家,也给大家做个参考。

SVG 作为矢量图的一种标准格式,已经得到了各大浏览器的支持,它也成为了 Web 中矢量图的代名词。 在网页中采用 SVG 代替位图有如下好处:

  1. SVG 相对于位图更清晰,在任意缩放的情况下后不会破坏图形的清晰度,SVG 能方便地解决高分辨率屏幕下图像显示不清楚的问题。

  2. 在图形线条比较简单的情况下,SVG 文件的大小要小于位图,在扁平化 UI 流行的今天,多数情况下 SVG 会更小。

  3. 图形相同的 SVG 比对应的高清图有更好的渲染性能。

  4. SVG 采用和 HTML 一致的 XML 语法描述,灵活性很高。

画图工具能导出一个个 .svg 文件,SVG 的导入方法和图片类似,既可以像下面这样在 CSS 中直接使用:

body {
 background-image: url(./svgs/activity.svg);
}
Salin selepas log masuk

也可以在 HTML 中使用:

<img src="./svgs/activity.svg"/>
Salin selepas log masuk

也就是说可以直接把 SVG 文件当成一张图片来使用,方法和使用图片时完全一样。 所以在3-19 加载图片 中介绍的两种方法 使用 file-loader 和 使用 url-loader 对 SVG 来说同样有效,只需要把 Loader test 配置中的文件后缀改成 .svg ,代码如下:

module.exports = {
 module: {
  rules: [
   {
    test: /\.svg/,
    use: ['file-loader']
   }
  ]
 },
};
Salin selepas log masuk

由于 SVG 是文本格式的文件,除了以上两种方法外还有其它方法,下面来一一说明。

使用 raw-loader

raw-loader 可以把文本文件的内容读取出来,注入到 JavaScript 或 CSS 中去。

例如在 JavaScript 中这样写:

import svgContent from './svgs/alert.svg';
Salin selepas log masuk

经过 raw-loader 处理后输出的代码如下:

module.exports = "<svg xmlns=\"http://www.w3.org/2000/svg\"... </svg>" // 末尾省略 SVG 内容
Salin selepas log masuk

也就是说 svgContent 的内容就等于字符串形式的 SVG,由于 SVG 本身就是 HTML 元素,在获取到 SVG 内容后,可以直接通过以下代码将 SVG 插入到网页中:

window.document.getElementById('app').innerHTML = svgContent;
Salin selepas log masuk

使用 raw-loader 时相关的 Webpack 配置如下:

module.exports = {
 module: {
  rules: [
   {
    test: /\.svg$/,
    use: ['raw-loader']
   }
  ]
 }
};
Salin selepas log masuk

由于 raw-loader 会直接返回 SVG 的文本内容,并且无法通过 CSS 去展示 SVG 的文本内容,因此采用本方法后无法在 CSS 中导入 SVG。 也就是说在 CSS 中不可以出现 background-image: url(./svgs/activity.svg) 这样的代码,因为 background-image: url(<svg>...</svg>) 是不合法的。

本实例提供项目完整代码

使用 svg-inline-loader

svg-inline-loader 和上面提到的 raw-loader 非常相似, 不同在于 svg-inline-loader 会分析 SVG 的内容,去除其中不必要的部分代码,以减少 SVG 的文件大小。

在使用画图工具如 Adobe Illustrator、Sketch 制作 SVG 后,在导出时这些工具会生成对网页运行来说不必要的代码。 举个例子,以下是 Sketch 导出的 SVG 的代码:

&lt;svg class=&quot;icon&quot; verison=&quot;1.1&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;24&quot; height=&quot;24&quot; viewBox=&quot;0 0 24 24&quot;
   stroke=&quot;#000&quot;&gt;
 &lt;circle cx=&quot;12&quot; cy=&quot;12&quot; r=&quot;10&quot;/&gt;
&lt;/svg&gt;
Salin selepas log masuk

被 svg-inline-loader 处理后会精简成如下:

&lt;svg viewBox=&quot;0 0 24 24&quot; stroke=&quot;#000&quot;&gt;&lt;circle cx=&quot;12&quot; cy=&quot;12&quot; r=&quot;10&quot;/&gt;&lt;/svg&gt;
Salin selepas log masuk

也就是说 svg-inline-loader 增加了对 SVG 的压缩功能。

使用 svg-inline-loader 时相关的 Webpack 配置如下:

module.exports = {
 module: {
  rules: [
   {
    test: /\.svg$/,
    use: [&#39;svg-inline-loader&#39;]
   }
  ]
 }
};
Salin selepas log masuk

本实例提供项目完整代码

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

在vue.js中整合vux如何实现上拉加载下拉刷新

在webpack中有关vue项目资源文件报404问题(详细教程)

使用webpack+vue2进行项目构建

有关vue中如何实现二级联动默认选中第一个值

在AngularJS中使用ui-route实现多层嵌套路由(详细教程)

Atas ialah kandungan terperinci 在Webpack中如何加载SVG. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Tutorial Bermula VUE3: Membungkus dan Membina dengan Webpack Tutorial Bermula VUE3: Membungkus dan Membina dengan Webpack Jun 15, 2023 pm 06:17 PM

Tutorial Bermula VUE3: Membungkus dan Membina dengan Webpack

Apakah perbezaan antara vite dan webpack Apakah perbezaan antara vite dan webpack Jan 11, 2023 pm 02:55 PM

Apakah perbezaan antara vite dan webpack

Cara menggunakan PHP dan webpack untuk pembangunan modular Cara menggunakan PHP dan webpack untuk pembangunan modular May 11, 2023 pm 03:52 PM

Cara menggunakan PHP dan webpack untuk pembangunan modular

Apakah fail yang boleh pakej vue webpack? Apakah fail yang boleh pakej vue webpack? Dec 20, 2022 pm 07:44 PM

Apakah fail yang boleh pakej vue webpack?

Apakah Webpack? Penjelasan terperinci tentang cara ia berfungsi? Apakah Webpack? Penjelasan terperinci tentang cara ia berfungsi? Oct 13, 2022 pm 07:36 PM

Apakah Webpack? Penjelasan terperinci tentang cara ia berfungsi?

Bagaimanakah webpack menukar modul es6 kepada es5? Bagaimanakah webpack menukar modul es6 kepada es5? Oct 18, 2022 pm 03:48 PM

Bagaimanakah webpack menukar modul es6 kepada es5?

Gunakan Spring Boot dan Webpack untuk membina projek bahagian hadapan dan sistem pemalam Gunakan Spring Boot dan Webpack untuk membina projek bahagian hadapan dan sistem pemalam Jun 22, 2023 am 09:13 AM

Gunakan Spring Boot dan Webpack untuk membina projek bahagian hadapan dan sistem pemalam

webpack mengendalikan isu keserasian penyemak imbas css webpack mengendalikan isu keserasian penyemak imbas css Aug 09, 2022 pm 02:50 PM

webpack mengendalikan isu keserasian penyemak imbas css

See all articles