亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

詳解html-webpack-plugin插件(用法總結)

2024-05-06 16:46:04
字體:
來源:轉載
供稿:網友

html-webpack-plugin 插件是用于編譯 Webpack 項目中的 html 類型的文件,如果直接將 html 文件置于 ./src 目錄中,用 Webpack 打包時是不會編譯到生產環境中的。因為 Webpack 編譯任何文件都需要基于配置文件先行配置的。

Webpack 插件使用三步曲:安裝>引入>配置

npm 安裝

npm install --save-dev html-webpack-plugin

yarn 安裝

yarn add html-webpack-plugin --dev

html-webpack-plugin 入口未定義時

//webpack.config.js const path = require('path');const htmlWebpackPlugin = require('html-webpack-plugin');module.exports = {  entry: {    home: path.resolve(__dirname, './src/app.js')  },  output: {    path: path.resolve(__dirname, 'dist'),    filename: '[name].js'  },  plugins: [    new htmlWebpackPlugin()  ]}

輸出的 html 文件為:dist/index.html

<!DOCTYPE html><html> <head>  <meta charset="UTF-8">  <title>Webpack App</title> </head> <body> <script type="text/javascript" src="home.js"></script></body></html>

此 webpack.config.js 配置文件,是最簡用法 html-webpack-plugin 甚至未傳遞任何參數,但它基于這個原則 Entrypoint undefined = index.html 當未定義此插件的入口時,默認為 index.html,輸出同樣是 index.html。
所以未定義入口時,不論 ./src 下有任何名稱的 html 文件都不會被打包處理,但是會默認輸出 index.html 文件。

html-webpack-plugin 中任何自定義參數設置都會覆蓋默認值

簡單定義一個入口(在參數對象的 template 字段中設置)看看效果:

./src/index.html 中有這個文件

<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <meta name="viewport" content="width=device-width, initial-scale=1.0">  <meta http-equiv="X-UA-Compatible" content="ie=edge">  <title>Document</title></head><body>  <div id="test">html webpack plugin</div></body></html>

webpack.config.js 增加 template 字段

const path = require('path');const htmlWebpackPlugin = require('html-webpack-plugin');module.exports = {  entry: {    home: path.resolve(__dirname, './src/app.js')  },  output: {    path: path.resolve(__dirname, 'dist'),    filename: '[name].js'  },  plugins: [    new htmlWebpackPlugin({      template: './src/index.html'//只增加了這行    })  ]}

打包結果是 dist/home.js 和 dist/index.html 其中 html 文件內容如下,和之前src文件中創建的完全一樣,證明自定義入口生效,且覆蓋了默認入口

<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <meta name="viewport" content="width=device-width, initial-scale=1.0">  <meta http-equiv="X-UA-Compatible" content="ie=edge">  <title>Document</title></head><body>  <div id="test">html webpack plugin</div></body></html>

template: './src/index2.html' 這里,template 的值就是 html 文件的入口,相當于js文件的 entry 字段的作用,只設置 template時,默認輸出為 index.html, 輸出文件名通過 `filename` 字段設置

template指定你生成的文件所依賴哪一個html文件模板,模板類型可以是html、jade、ejs等。但是要注意的是,如果想使用自定義的模板文件的時候,你需要安裝對應的loader。

當配置了 html 文件的出口 filename 時

const path = require('path');const htmlWebpackPlugin = require('html-webpack-plugin');module.exports = {  entry: {    home: path.resolve(__dirname, './src/app.js')  },  output: {    path: path.resolve(__dirname, 'dist'),    filename: '[name].js'  },  plugins: [    new htmlWebpackPlugin({      template: './src/index2.html',      filename: 'index.output.html'    })  ]}

輸出為 dist/home.js 和 dist/index.output.html

同 webpack.config.js 配置文件的 output 屬性的 filename 字段一樣,htmlWebpackPlugin({})的filname 字段也可以在其值加文件夾實現分類

const path = require('path');const htmlWebpackPlugin = require('html-webpack-plugin');module.exports = {  entry: {    home: path.resolve(__dirname, './src/app.js')  },  output: {    path: path.resolve(__dirname, 'dist'),    filename: '[name].js'  },  plugins: [    new htmlWebpackPlugin({      template: './src/index2.html',      filename: './category/index.output.html'    })  ]}

輸出為 dist/home.js 和 dist/category/index.output.html

title 字段,只有未定義 template 模板文件的時候生效,即只在使用默認輸出文件index.html 的時候,title 設置才有用,否則它的值,會被你指定的 template 文件的title所覆蓋,title 默認值為 Webpack App

favicon

'./somepath/favicon.ico',它的值是你的 favicon.ico 圖標的路徑

inject的四個值: true body head false 指定在何處(body or head)引入 script 文件

  • true 默認值,script標簽位于html文件的 body 底部
  • body script標簽位于html文件的 body 底部
  • head script標簽位于html文件的 head中
  • false 不插入生成的js文件,這個幾乎不會用到的

其中 body 和 head 為字符串類型需要加引號,false和true為 Boolean 類型值

minify 的值是一個對象,設置壓縮屬性

plugins: [new HtmlWebpackPlugin({  ...  minify: {    removeAttributeQuotes: true // 移除屬性的引號  }})]
  • hash:布爾值,用于清除緩存
  • cache: 布爾值, 指定文件要不要緩存
  • showErrors:布爾值,將錯誤信息寫入HTML頁面
  • meta: {} 值是對象,設置元信息
meta:{viewport: 'width=device-width, initial-scale=1, shrink-to-fit=no'}

xhtml

一個布爾值,默認值是 false ,如果為 true ,則以兼容 xhtml 的模式引用文件。

chunks

chunks主要用于多入口文件,當你有多個入口文件,那就回編譯后生成多個打包后的文件,那么chunks 就能選擇你要使用那些js文件

entry: {  index: path.resolve(__dirname, './src/index.js'),  devor: path.resolve(__dirname, './src/devor.js'),  main: path.resolve(__dirname, './src/main.js')}plugins: [  new httpWebpackPlugin({    chunks: ['index','main']  })]

那么編譯后:

<script type=text/javascript src="index.js"></script><script type=text/javascript src="main.js"></script>

如果你沒有設置 chunks 選項,那么默認html 文件會引入所有的 entry 里面的js文件

excludeChunks  Chunks作用是一樣的,值也都是數組形式,對多入口js進行選擇

排除掉一些js

excludeChunks: ['devor.js']// 等價于上面的

xhtml

一個布爾值,默認值是 false ,如果為 true ,則以兼容 xhtml 的模式引用文件。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
奇米一区二区三区四区久久| 日韩av中文在线| 国产中文欧美精品| 97精品一区二区三区| 中文欧美日本在线资源| 97碰碰碰免费色视频| 成人在线观看视频网站| 欧美日韩中国免费专区在线看| 欧美色欧美亚洲高清在线视频| 日韩中文字幕精品视频| 欧美黄色免费网站| 欧美成人精品激情在线观看| 97视频免费观看| 91久久精品国产91性色| 欧美黄色免费网站| 久久久人成影片一区二区三区观看| 久久成人这里只有精品| 亚州精品天堂中文字幕| 精品视频久久久久久久| 日韩精品视频中文在线观看| 久久精品国产久精国产思思| 中文字幕精品视频| 欧美大尺度在线观看| 精品美女久久久久久免费| 亚洲天堂免费在线| 日韩欧美第一页| 亚洲在线免费看| 国产在线日韩在线| 98精品国产高清在线xxxx天堂| 亚洲国产精品福利| 欧美人交a欧美精品| 精品视频久久久久久| 国产高清视频一区三区| 98视频在线噜噜噜国产| 国产精品无av码在线观看| 久久精品国产91精品亚洲| 国产99久久精品一区二区 夜夜躁日日躁| 日韩中文字幕视频在线| 亚洲天堂一区二区三区| 青青a在线精品免费观看| 国产成人在线亚洲欧美| 国产成人一区三区| 日韩av中文字幕在线播放| 日韩精品中文字| 亚洲午夜av久久乱码| 亚洲第一精品久久忘忧草社区| 国产欧美中文字幕| 全亚洲最色的网站在线观看| 91精品国产乱码久久久久久久久| 日韩在线观看电影| 久久av中文字幕| 中文字幕在线视频日韩| 久久av红桃一区二区小说| 亚洲男人天堂网| 亚洲国产一区二区三区在线观看| 国产午夜精品全部视频播放| 丰满岳妇乱一区二区三区| 欧美整片在线观看| 精品国产户外野外| 国产成人精品优优av| 91色p视频在线| 日本精品性网站在线观看| 久久久999成人| www国产精品视频| 超碰精品一区二区三区乱码| 欧美一级电影免费在线观看| 国产激情999| 欧美裸体xxxxx| 欧美激情一级二级| 91av免费观看91av精品在线| 亚洲第一色中文字幕| 亚洲综合日韩中文字幕v在线| 免费97视频在线精品国自产拍| 2019国产精品自在线拍国产不卡| 精品久久久中文| 在线日韩第一页| 日韩一区二区久久久| 亚洲区一区二区| 欧美大片在线免费观看| 欧洲一区二区视频| 精品亚洲夜色av98在线观看| 中文字幕国产精品久久| 91精品视频免费看| 欧美综合第一页| 国产精品视频一区二区三区四| 中文字幕日韩视频| 欧美激情2020午夜免费观看| 日韩精品极品视频| 国外成人在线播放| 欧美日韩在线观看视频小说| 色综久久综合桃花网| 中日韩美女免费视频网址在线观看| 一二美女精品欧洲| 97超碰色婷婷| 日韩精品在线影院| 国产一区二区三区在线| 日韩一区二区精品视频| 久久久精品久久久| 久久久久久欧美| 中文字幕欧美国内| 久久久久久久久爱| 日韩国产精品亚洲а∨天堂免| 亚洲国产精品久久久久秋霞蜜臀| 亚洲国产成人久久综合一区| 国产成人精品久久久| 日本久久久a级免费| 久久久av免费| 国产精品久久久久av| 日韩免费av片在线观看| 国产精品久久久久影院日本| 日韩中文字幕网址| 亚洲欧美精品一区| 81精品国产乱码久久久久久| 狠狠色噜噜狠狠狠狠97| 欧美日韩激情美女| 国产精品美女久久久久av超清| 国产美女久久久| 国产精品十八以下禁看| 欧美激情a∨在线视频播放| 国产精品一区二区av影院萌芽| 欧美激情第99页| 都市激情亚洲色图| 欧美午夜宅男影院在线观看| 亚洲欧美激情视频| 91爱视频在线| 国产精品成av人在线视午夜片| 欧美成人免费观看| 亚洲国产古装精品网站| 国产国语刺激对白av不卡| 国产亚洲精品久久久久久| 色一情一乱一区二区| 懂色av中文一区二区三区天美| 中文字幕自拍vr一区二区三区| 国产成人精品在线| 日韩欧美大尺度| 青草热久免费精品视频| 欧美激情精品久久久久久大尺度| 国产精品九九久久久久久久| 97色伦亚洲国产| 亚洲午夜av电影| 欧美午夜精品久久久久久久| 精品中文字幕久久久久久| 国产一区二区三区视频在线观看| 亚洲男女自偷自拍图片另类| 亚洲香蕉av在线一区二区三区| 在线成人激情视频| 亚洲欧美国产高清va在线播| 欧美成人精品在线观看| 国产精品入口日韩视频大尺度| xvideos成人免费中文版| 亚洲欧美精品一区| 日韩电影视频免费| 日韩精品一二三四区| 成人深夜直播免费观看| 国产精品爽爽ⅴa在线观看| 国产玖玖精品视频| 亚洲日韩中文字幕| 日韩中文字幕在线精品| 欧美床上激情在线观看| 国内精品国产三级国产在线专| 久久99亚洲热视| 久久久午夜视频| 国产精品影片在线观看| 国产成人精彩在线视频九色|