HTMLWebpackPluginを使用しており、テンプレートにimgタグがあります。
<img src="./images/logo/png">
あなたが気づいたなら、ここではwebpackがwebpack.config.jsファイルで設定されているファイルローダーをトリガーする相対パスを使用していますが、コンパイル後にhtmlでまったく同じsrc属性を取得します:
<img src="./images/logo/png">
これらの相対パスを動的に置き換えるためにwebpackをトリガーするにはどうすればよいですか?
私はウェブパックの専門家ではありませんが、これを行うことで動作するようになりました
<img src="<%=require('./src/assets/logo.png')%>">
プラグイン構成
new HtmlWebpackPlugin({
filename: 'index.html',
template: 'index.html'
}),
ドキュメントによると: https://github.com/jantimon/html-webpack-plugin/blob/master/docs/template-option.md
デフォルトでは(何らかの方法でローダーを指定しない場合)、フォールバックlodashローダーが起動します。
<%= %>
はlodashテンプレートを示します
内部では、メイン構成からすべてのローダーを継承するwebpack子コンパイルを使用しています。
Imgパスでrequire
を呼び出すと、ファイルローダーが呼び出されます。
パスの問題が発生する可能性がありますが、動作するはずです。
HTML webpackプラグインでhtml-loaderを使用するとうまくいきました。
module: {
rules: [
{
test: /\.(html)$/,
use: ['html-loader']
}
]
},
plugins: [
new HtmlWebpackPlugin({
template: './src/index.html'
})
]
CopyWebpackPlugin
を使用する必要があります。
const CopyWebpackPlugin = require('copy-webpack-plugin');
plugins:[
....
new CopyWebpackPlugin([
{from:'./src/assets/images',to:'images'}
]),
....
]
これはsrc/assets/images
を「distfolder/images」に。
Webpack構成でurl-loaderを使用して、最終バンドルでbase64 uriとしてエンコードされた特定の制限以下の画像を追加し、制限を超える画像を通常の画像タグとして(publicPathに対して)追加できます。
module.rules.Push({
test: /\.(png|jp(e*)g|gif)$/,
exclude: /node_modules/,
use: [{
loader: 'url-loader',
options: {
limit: 10000,
publicPath: "/"
}
}]
})