当前位置:  开发笔记 > 编程语言 > 正文

如何使用webpack设置内联svg

如何解决《如何使用webpack设置内联svg》经验,为你挑选了6个好方法。

我想知道如何使用webpack设置内联svg?

我正在关注react-webpack-cookbook.

我使用文件加载器正确设置了webpack.config.

但是,该示例显示使用如下背景图像:

.icon {
   background-image: url(./logo.svg);
}

哪个工作正常,但我想有一个内联svg图像我该怎么做才能在我的react组件中包含我的logo.svg内联?

import React, { Component } from 'react'

class Header extends Component {

  render() {
    return (
        
); } }; export default Header

svnm.. 28

实际上,Michelle的回答指出了我正确的方向,并且适用于使用webpack加载svg文件并将其用作src

但是为了实际获得内联svg,我需要执行以下操作:

而不是文件加载器使用svg-inline-loader作为你的svg加载器:

{ test: /\.svg$/, loader: 'svg-inline-loader' }

然后在组件中加载svg内联:

import React, { Component } from 'react'
import logo from "./logo.svg";

class Header extends Component {

  render() {
    return (
        
); } }; export default Header

看起来有一个用于反应svg-inline-react的内联svg包装器,这将是另一种选择,而不是



1> svnm..:

实际上,Michelle的回答指出了我正确的方向,并且适用于使用webpack加载svg文件并将其用作src

但是为了实际获得内联svg,我需要执行以下操作:

而不是文件加载器使用svg-inline-loader作为你的svg加载器:

{ test: /\.svg$/, loader: 'svg-inline-loader' }

然后在组件中加载svg内联:

import React, { Component } from 'react'
import logo from "./logo.svg";

class Header extends Component {

  render() {
    return (
        
); } }; export default Header

看起来有一个用于反应svg-inline-react的内联svg包装器,这将是另一种选择,而不是


Twitter发布了一个很好的案例研究,显示了为什么您不应该*使用* dangerouslySetInnerHTML来显示SVG:https://medium.com/@paularmstrong/twitter-lite-and-high-performance-react-progressive -web-apps-scale-d28a00e780a3#3732

2> jsaddwater..:

老问题,但我没有在任何地方看到这个解决方案所以我决定发布它,希望它能帮助某人.

如果您希望能够设置这些SVG图标的样式,您可能希望使用原始加载器加载它们:

webpack.config.js:

 { 
      test: /\.svg$/, 
      loader: 'raw-loader' 
 } 

在我看来导入:

import closeIcon from 'svg/ic_close_black_24px.svg'; 

模板(Mustache使用3个括号来插入未编码的SVG数据(URL)):


这样就会插入SVG数据而不是括号,如下所示:


我正在使用带有Webpack 2.5.1的Backbone和Mustache模板引擎



3> 小智..:

我希望我的迟到答案仍然对某人有用,因为我不喜欢任何上述选项.

该反应-SVG-装载机的WebPack装载程序允许用户导入SVG图标,如JSX组件:

import Logo from './logo.svg';

class App extends Component {
  render() {
    return (
      
); } }

最小配置如下所示:

{
  test: /\.svg$/,
  use: [
    {
      loader: "babel-loader"
    },
    {
      loader: "react-svg-loader",
      options: {
        jsx: true // true outputs JSX tags
      }
    }
  ]
}

最好的部分是它只输出svg文件内容,而不需要任何额外的包装器和dangerouslySetInnerHTML代码.



4> Michelle Til..:

如果我没有弄错,因为你正在使用文件加载器,你可以像其他任何需要一样使用它.Webpack将变成require("./logo.svg")文件的路径,它在捆绑时会发出.

import React, { Component } from 'react'

import mySvg from './logo.svg'

class Header extends Component {

  render() {
    return (
        
); } }; export default Header


它对我不起作用:(你可以发布你的webpack.config.js吗?也许我可以在那里发现我的错误.

5> Dmitry..:

这是一个简单的非反应性解决方案。

    安装SVG内联加载器

    在webpack.config.js中添加 { test: /\.svg$/, loader: 'svg-inline-loader' }

    在您的js文件中,导入svg图片,并将其添加到DOM元素中,如下所示

  import Svg from './svg.svg';

  function component() {
    const element = document.createElement('div');

    element.innerHTML = Svg;

    return element;
  }

  document.body.appendChild(component());


不依靠反应并呈现香草ECMAScript的荣誉

6> 小智..:

类似于使用React的另一个答案,也有一个方便的Vue插件。

vue-svg-loader只是将其放入您的配置中并开始使用。令人高兴的是,它还将通过SVGO运行svg进行优化。

组态

{
    test: /\.svg$/,
  loader: 'vue-svg-loader', // `vue-svg` for webpack 1.x
  options: {
    // optional [svgo](https://github.com/svg/svgo) options
    svgo: {
      plugins: [
        {removeDoctype: true},
        {removeComments: true}
      ]
    }
  }
}

用法




推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有