2015-10-10 13 views
45

私は、すなわちpublic/asests/csspublic/assets/js、それぞれのサブディレクトリに出力CSSやJSへのconfigureのWebPACKを管理していました。しかし、私はイメージとフォントで同じことをする方法を知らない。設定]のWebPACK

つまり、public/assets/imagesフォルダに画像を出力し、public/assets/fontsにフォントを出力したいと思います。

var path = require('path'); 
var ExtractCSS = require('extract-text-webpack-plugin'); 

module.exports = { 
    context: path.resolve('private/js'), 
    resolve: ['', '.js', '.jsx', '.es6', '.json'], 
    entry: { 
     homepage: './homepage' 
    }, 
    output: { 
     path: path.resolve('public/assets'), 
     publicPath: '/public/assets/', 
     filename: 'js/[name].js' 
    }, 
    plugins: [ 
     new ExtractCSS('css/[name].css') 
    ], 
    devServer: { 
     contentBase: 'public' 
    }, 
    module: { 
     loaders: [ 
      { 
       test: /\.(es6|js|jsx)$/, 
       exclude: /node_modules/, 
       loader: 'babel-loader' 
      }, 
      { 
       test: /\.css$/, 
       exclude: /node_modules/, 
       loader: ExtractCSS.extract('style-loader', 'css-loader') 
      }, 
      { 
       test: /\.less$/, 
       exclude: /node_modules/, 
       loader: ExtractCSS.extract('style-loader', 'css-loader!less-loader') 
      }, 
      { 
       test: /\.(jpg|jpeg|gif|png|woff|woff2|eot|ttf|svg)$/, 
       exclude: /node_modules/, 
       loader: 'url-loader?limit=1024' 
      } 
     ] 
    } 
} 

答えて

58

私はGitHubの上url-loader & file-loaderのドキュメントを参照して、これを把握できます。

は、ここに私のWebPACKの設定ファイルです。

すべて私は、フルパスを指定するためにという名前のクエリ文字列パラメータをローダーに追加する必要がありました。また、出力場所にファイルの名前を付ける方法を指定できることも学びました。

{ 
    test: /\.(jpg|jpeg|gif|png)$/, 
    exclude: /node_modules/, 
    loader:'url-loader?limit=1024&name=images/[name].[ext]' 
}, 
{ 
    test: /\.(woff|woff2|eot|ttf|svg)$/, 
    exclude: /node_modules/, 
    loader: 'url-loader?limit=1024&name=fonts/[name].[ext]' 
} 
+3

ねえ、これは本当に役に立ちました。しかし何らかの理由で、フォントだけが私のために働いた。イメージは新しいイメージフォルダにエクスポートされません。私は、プラグインをしないのですか、私はSVGのを使用しています事実が問題でしょうか? – HGB

+2

私は同じ問題がありました。画像のURLローダーの代わりにファイルローダーを使用して修正しました。 'loader: 'file?limit = 1024&name = images/[name]。[ext]'' – thomas

+1

これはwebpack 1のですか?私はこのエラーを受け取ります:ファイルローダーと名前= images/[名前]。[ext] ' – Kokodoko

10
{ 
    test: /\.(ttf|eot|svg|woff2?)(\?v=[a-z0-9=\.]+)?$/i, 
    include: folders.npm, 
    loader: 'file?name=fonts/[name].[ext]' 
}, 
{ 
    test: /\.(jpe?g|png|gif|svg|ico)$/i, 
    include: folders.src, 
    loaders: [ 
     'file?name=images/[sha512:hash:base64:7].[ext]', 
     'image-webpack?progressive=true&optimizationLevel=7&interlaced=true' 
    ] 
} 

これは私が生産に使用するものです。私は、多くの場合、IEのフォールバック* .SVG画像が使用されている状況やSVGフォントに遭遇します。ここでは、フォントは常にnode_modulesの内側にあると仮定します。私はまた、開発者がtest: /fonts\/[w+].(svg|eot ....)をやって見てきました。

+0

これは、標準のノードの練習ですが、/ node_modules /代わりのfolders.npmを使用すると、私を助けた場合、私は知りません。あなたのアプローチは、私のフォントがnode_modulesフォルダから来ていたので、好きでした。 – jarus

+1

folders.npmは可変で、私は最初に宣言しました。 CONSTパス= { ルート:path.resolve( ' ')、 NPM:等path.resolve('。'、 '/ node_modules') ...}。 – gcerar