html-webapck-plugin - 2019-02-18

  • 2019-02-18 創(chuàng)建

主要作用

  • 為html文件中引入的外部資源如script、link動態(tài)添加每次compile后的hash忆某,防止引用緩存的外部文件問題

  • 可以生成創(chuàng)建html入口文件点待,比如單頁面可以生成一個html文件入口,配置N個html-webpack-plugin可以生成N個頁面入口

詳解

插件的基本作用就是生成html文件弃舒。原理很簡單:

將 webpack中entry配置的相關(guān)入口chunk 和 extract-text-webpack-plugin抽取的css樣式 插入到該插件提供的template或者templateContent配置項指定的內(nèi)容基礎(chǔ)上生成一個html文件癞埠,具體插入方式是將樣式link插入到head元素中状原,script插入到head或者body中。

var HtmlWebpackPlugin = require('html-webpack-plugin')
    
webpackconfig = {
    ...
    plugins: [
        new HtmlWebpackPlugin()
    ]
}

不配置任何選項的html-webpack-plugin插件苗踪,他會默認將webpack中的entry配置所有入口thunk和extract-text-webpack-plugin抽取的css樣式都插入到文件指定的位置颠区。例如上面生成的html文件內(nèi)容如下

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Webpack App</title>
  <link href="index-af150e90583a89775c77.css" rel="stylesheet"></head>
  <body>
  <script type="text/javascript" src="common-26a14e7d42a7c7bbc4c2.js"></script>
  <script type="text/javascript" src="index-af150e90583a89775c77.js"></script></body>
</html>

配置項

this.options = _.extend({
    template: path.join(__dirname, 'default_index.ejs'),
    filename: 'index.html',
    hash: false,
    inject: true,
    compile: true,
    favicon: false,
    minify: false,
    cache: true,
    showErrors: true,
    chunks: 'all',
    excludeChunks: [],
    title: 'Webpack App',
    xhtml: false
  }, options);
  • title: 生成的html文檔的標(biāo)題。配置該項通铲,它并不會替換指定模板文件中的title元素的內(nèi)容毕莱,除非html模板文件中使用了模板引擎語法來獲取該配置項值,如下ejs模板語法形式:
<title>{%= o.htmlWebpackPlugin.options.title %}</title>
  • filename:輸出文件的文件名稱颅夺,默認為index.html朋截,不配置就是該文件名;此外吧黄,還可以為輸出文件指定目錄位置(例如'html/index.html')

    **關(guān)于filename補充兩點:**
    

    1部服、filename配置的html文件目錄是相對于webpackConfig.output.path路徑而言的,不是相對于當(dāng)前項目目錄結(jié)構(gòu)的拗慨。
    2廓八、指定生成的html文件內(nèi)容中的linkscript路徑是相對于生成目錄下的,寫路徑的時候請寫生成目錄下的相對路徑胆描。

  • template: 本地模板文件的位置瘫想,支持加載器(如handlebars、ejs昌讲、undersore国夜、html等),如比如 handlebars!src/index.hbs短绸;

    **關(guān)于template補充幾點:**
    

    1车吹、template配置項在html文件使用file-loader時,其所指定的位置找不到醋闭,導(dǎo)致生成的html文件內(nèi)容不是期望的內(nèi)容窄驹。
    2、為template指定的模板文件沒有指定任何loader的話证逻,默認使用ejs-loader乐埠。如template: './index.html',若沒有為.html指定任何loader就使用ejs-loader

  • templateContent: string|function囚企,可以指定模板的內(nèi)容丈咐,不能與template共存。配置值為function時龙宏,可以直接返回html字符串棵逊,也可以異步調(diào)用返回html字符串。

  • inject:向template或者templateContent中注入所有靜態(tài)資源银酗,不同的配置值注入的位置不經(jīng)相同辆影。

    1徒像、true或者body:所有JavaScript資源插入到body元素的底部
    2、head: 所有JavaScript資源插入到head元素中
    3蛙讥、false: 所有靜態(tài)資源css和JavaScript都不會注入到模板文件中

  • favicon: 添加特定favicon路徑到輸出的html文檔中锯蛀,這個同title配置項,需要在模板中動態(tài)獲取其路徑值

  • hash:true|false键菱,是否為所有注入的靜態(tài)資源添加webpack每次編譯產(chǎn)生的唯一hash值谬墙,添加hash形式如下所示:
    html <script type="text/javascript" src="common.js?a3e1396b501cdd9041be"></script>

  • chunks:允許插入到模板中的一些chunk,不配置此項默認會將entry中所有的thunk注入到模板中经备。在配置多個頁面時拭抬,每個頁面注入的thunk應(yīng)該是不相同的,需要通過該配置為不同頁面注入不同的thunk侵蒙;

  • excludeChunks: 這個與chunks配置項正好相反造虎,用來配置不允許注入的thunk。

  • chunksSortMode: none | auto| function纷闺,默認auto算凿; 允許指定的thunk在插入到html文檔前進行排序。

    function值可以指定具體排序規(guī)則犁功;auto基于thunk的id進行排序氓轰; none就是不排序

  • xhtml: true|fasle, 默認false;是否渲染link為自閉合的標(biāo)簽浸卦,true則為自閉合標(biāo)簽

  • cache: true|fasle, 默認true署鸡; 如果為true表示在對應(yīng)的thunk文件修改后就會emit文件

  • showErrors: true|false,默認true限嫌;是否將錯誤信息輸出到html頁面中靴庆。這個很有用,在生成html文件的過程中有錯誤信息怒医,輸出到頁面就能看到錯誤相關(guān)信息便于調(diào)試炉抒。

  • minify: {....}|false;傳遞 html-minifier 選項給 minify 輸出稚叹,false就是不使用html壓縮焰薄,minify具體配置參數(shù)請點擊html-minifier

chunks順序

如果只設(shè)置 chunks 屬性,html 引入順序并不會按照 chunks 數(shù)組殊勛排列扒袖,例:

chunks: ['common', 'public', 'index'],
image.png
解決:
  new HtmlWebpackPlugin({
      ...
      chunks: ['common', 'public', 'index'],
      chunksSortMode: function (chunk1, chunk2) {
          var order = ['common', 'public', 'index'];
          var order1 = order.indexOf(chunk1.names[0]);
          var order2 = order.indexOf(chunk2.names[0]);
          return order1 - order2;  
      }
      // chunksSortMode: 'manual'   // 手動排序
  })
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末塞茅,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子僚稿,更是在濱河造成了極大的恐慌,老刑警劉巖蟀伸,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚀同,死亡現(xiàn)場離奇詭異缅刽,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抹恳,“玉大人痹栖,你說我怎么就攤上這事〉脑玻” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長卦睹。 經(jīng)常有香客問我,道長方库,這世上最難降的妖魔是什么结序? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮纵潦,結(jié)果婚禮上徐鹤,老公的妹妹穿的比我還像新娘。我一直安慰自己邀层,他們只是感情好返敬,可當(dāng)我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著寥院,像睡著了一般劲赠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上只磷,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天经磅,我揣著相機與錄音,去河邊找鬼钮追。 笑死预厌,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的元媚。 我是一名探鬼主播轧叽,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼刊棕!你這毒婦竟也來了炭晒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤甥角,失蹤者是張志新(化名)和其女友劉穎网严,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嗤无,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡震束,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年怜庸,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片垢村。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡割疾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出嘉栓,到底是詐尸還是另有隱情宏榕,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布侵佃,位于F島的核電站麻昼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏趣钱。R本人自食惡果不足惜涌献,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望首有。 院中可真熱鬧燕垃,春花似錦、人聲如沸井联。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽烙常。三九已至轴捎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蚕脏,已是汗流浹背侦副。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留驼鞭,地道東北人秦驯。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像挣棕,于是被迫代替她去往敵國和親译隘。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容

  • html-webpack-plugin詳解 引言 最近在react項目中初次用到了html-webapck-plu...
    peng凱閱讀 651評論 0 1
  • 寫在前面的話 閱讀本文之前洛心,先看下面這個webpack的配置文件固耘,如果每一項你都懂,那本文能帶給你的收獲也許就比較...
    不忘初心_9a16閱讀 3,234評論 0 17
  • webpack從零開始第1課:安裝webpack和webpack-dev-server webpack目錄 第1課...
    泉泉泉泉泉泉閱讀 1,195評論 0 1
  • 作用 直接為項目生成一個或多個HTML文件(HTML文件個數(shù)由插件實例的個數(shù)決定)词身,并將webpack打包后輸出的...
    前端xiyoki閱讀 19,969評論 2 10
  • 跑江湖厅目, 腦子靈活口才棒。 闖江湖, 武藝高超本領(lǐng)強损敷。 靈活終有遲鈍時户辫, 滿嘴忽悠會露餡, 高超總是在努力嗤锉, 武藝...
    SunshineBoyxiao閱讀 218評論 0 1