2017-07-03 13 views
2

複数のWebpackローダーを組み合わせてSVGアセットを読み込み、インラインで使用するように変換し、最終的に結果を実際のReactコンポーネントに変換します。応用。複数のWebpackローダーを使用してSVGをReactコンポーネントに変換する

const path = require('path') 

module.exports = { 
    entry: './src/index.js', 
    output: { 
    filename: '[name].bundle.js', 
    path: path.resolve(__dirname, 'dist') 
    }, 
    module: { 
    rules: [ 
     { 
     test: /\.jsx?$/, 
     include: path.resolve(__dirname, 'src'), 
     use: { 
      loader: 'babel-loader', 
      options: { 
      presets: [ 
       ['env', { 
       browsers: supportedBrowsers, 
       modules: false 
       }] 
      ] 
      } 
     } 
     }, 
     { 
     test: /\.svg$/, 
     include: path.resolve(__dirname, 'src'), 
     use: [ 
      { 
      loader: 'svg-inline-loader', 
      options: { 
       removeTags: true 
      } 
      }, 
      { 
      loader: 'svg-react-loader' 
      } 
     ] 
     } 
    ] 
    } 
} 

それが期待通りローダーが働く所有だ上でsvg-react-loaderを使用する場合は、しかし、SVG資産の多くは、私がsvg-inline-loaderを使用して取り除くしたい不要な要素と属性を持っています。

上記のように設定を使用すると、結果は実行可能なJavaScriptではなくテキストとして読み込まれます。

私はこれを達成するための私の試みで、次のローダー使用しています:他のローダーを使用しても大丈夫でしょう

答えて

1

を? svgo-loadersvg-inline-loaderを組み合わせて、svgoが提供するすべてのオプションを使用できます。

ので、ちょうどnpm i -D svgo-loader

を行うと、これにあなたのWebPACKのコンフィグを変更する場合:

{ 
    test: /\.svg$/, 
    use: [ 
    'svg-react-loader', 
    { 
     loader: 'svgo-loader', 
     options: { 
     plugins: [ 
      {cleanupAttrs: true} 
     ] 
     } 
    } 
    ], 
    exclude: /node_modules/ 
} 
+0

これは私にとって受け入れ可能な解決策だろう、しかし、私はまだ理由は、このセットアップが何であるかを知りたいのです働いていない。 –

+1

@JonKoops 'svg-inline-loader'はsvgを文字列として読み込むので、HTMLやJavaScriptでインラインで使うことができます。 'svg-react-loader'はsvgファイルを要求します –

関連する問題