これが私のユースケースです:ほとんどのsvgはインライン化されるべきです。だから私はこのようなルールを設定します:
_{test: /\.svg$/, use: "svg-inline-loader"},
_
場合によっては、インライン化するのではなく、svgのURLが必要なだけです。 webpack 1.xでは、次のように要求しました:require('path/to/file.svg?external')
。
対応するルールは次のとおりです。
_{test: /\.svg\?external$/, use: "file-loader!image-webpack-loader"},
_
移行後、最初のルールのみがall my svgsに適用されているため、ルールのtest
ing時にwebpack 2に_?
_部分が含まれなくなったようです。
これを回避する方法はありますか?同じ拡張子のファイルをrequire
するときに、異なるローダーのセットを適用する方法について、異なる戦略があるのでしょうか。
PS:require('!file-loader!image-webpack-loader!path/to/file.svg')
のようなファイルが必要になる可能性があることは承知していますが、ローダーはこれよりも少し複雑で、常に構成を繰り返したくありません。
PSS:これも機能していないようです(それでも最初のルールのみが適用されます)
_{test: /\.svg$/, use: "svg-inline-loader", exclude: /\?external/},
{test: /\.svg$/, use: "file-loader?!image-webpack-loader", include: /\?external/}
_
それで私は最近webpackのJuhoVepsäläinenによる講演に参加し、その答えを このスライド で見つけました:
{
test: /.css$/,
oneOf: [
{
resourceQuery: /inline/, // foo.css?inline
use: 'url-loader',
},
{
resourceQuery: /external/, // foo.css?external
use: 'file-loader',
},
],
}
resourceQuery 救助に!
resolveLoader.alias
はあなたのための解決策になります。
構成は次のようになります。
resolveLoader: {
alias: {
myLoader1: "svg-inline-loader", // and much more
myLoader2: "file-loader!image-webpack-loader" // and much more
}
}
および使用法:
require('myLoader1!path/to/file1.svg');
require('myLoader2!path/to/file2.svg');
または、たとえばmyLoader1構成をデフォルトにし、時々myLoader2ローダーを使用する場合は、次の種類の構成を使用します。
{
test: /\.svg$/,
use: "svg-inline-loader" // and much more
}
// ...
resolveLoader: {
alias: {
myLoader: "file-loader!image-webpack-loader" // and much more
}
}
そしてこのように使用します:
require('path/to/file1.svg'); // default svg-inline-loader
require('!myLoader!path/to/file2.svg'); // specific file-loader!image-webpack-loader
// ! at the beginning - disables loaders from default
// and myLoader enables file-loader and image-webpack-loader
PS。同様の質問がありました ここ これはwebpack 1用ですが、ドキュメントにはresolveLoader.alias
同じように機能します。
test
に加えて、include
/exclude
条件を指定できます。 構成オプションに関するドキュメント から:
{
test: /\.jsx?$/,
include: [
path.resolve(__dirname, "app")
],
exclude: [
path.resolve(__dirname, "app/demo-files")
]
// these are matching conditions, each accepting a regular expression or string
// test and include have the same behavior, both must be matched
// exclude must not be matched (takes preferrence over test and include)
// Best practices:
// - Use RegExp only in test and for filename matching
// - Use arrays of absolute paths in include and exclude
// - Try to avoid exclude and prefer include
}