1. 程式人生 > >webpack 處理html中img的src引入的圖片

webpack 處理html中img的src引入的圖片

webpack在管理模組,處理各種資源上都是無往不利,但唯獨在處理html上比較困難,不識別html中img標籤src引入的圖片。 
html-webpack-plugin這種外掛輔助處理html非常好,但卻仍然未解決html程式碼中的圖片問題,未免美中不足。在遍尋開源模組無果後,認真研究webpack的loader和plugin後,終於解決了這個問題。

從npm安裝模組

npm i html-withimg-loader --save

使用:

var html = require('html-withimg-loader!./xxx.html');

xxx.html程式碼:

<!DOCTYPE html>
<html>
<head>
#include("./layout/layout.html")
<title>示例頁面</title>
</head>
<body>
<script type="text/template">
    <div>dfde</div>
</script>
<img id='test2' src='images/logo.gif' />
<img id="test1" src="./images/test4.jpg" />
#include("./layout/scripts.html")
</body>
</html>

編譯結果為:

<!DOCTYPE html><html><head><meta name="description" content=""><meta name="keywords" content=""><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><title>示例頁面</title></head><body><script type="text/template">    <div>dfde</div></script><img id='test2' src="/__build/images/logo_f7b644e2086e41139fa132fd229450f4.gif" /><img id="test1" src="/__build/images/test4_df538a9696eb4c032286f7f6bc0d1708.jpg" /><script src="https://static.yiji.com/resource/lib/jquery/1.7.2/jquery.min.js"></script></body></html>

img標籤的路徑會被url-loader處理,並且資源被新增到依賴,webpack會按照url-loader配置進行打包 
細心的朋友應該注意到原始碼裡面有兩句#include的語法,沒錯,模組額外支援了include載入子頁面的功能~

那進一步的需求,在入口html頁面中也想享受這個功能怎麼辦呢?很簡單,結合html-webpack-plugin就可以了

plugins: [
    new HtmlWebpackPlugin({
        template: 'html-withimg-loader!' + path.resolve(srcDir, filename),
        filename: filename
    }),
]

然後瀏覽器中輸入地址的時候記得加上_build目錄,這裡的html才是編譯過的,很多新手不知道這個,注意一下,如:

127.0.0.1:3001/__build/xxx.html

然後就看到正確的頁面了!