成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Webpack最常用的插件:HTML Webpack Plugin

開發 前端
HTML Webpack Plugin是使用 webpack 開發前端項目必不可少的插件也不為過,因為它可以自動幫我們將 webpack 打包生成的文件(比如 js 文件、css 文件)嵌入到 html 文件中。

今天介紹 webpack 的一個最常用的插件:HTML Webpack Plugin。

說它是使用 webpack 開發前端項目必不可少的插件也不為過,因為它可以自動幫我們將 webpack 打包生成的文件(比如 js 文件、css 文件)嵌入到 html 文件中。

這在生成的文件帶有哈希串時尤為有用。

在 webpack 配置文件引入 HtmlWebpackPlugin 插件,然后在 plugins 數組中通過 new HtmlWebpackPlugin() 加入 HtmlWebpackPlugin 實例對象即可。

// webpack.config.js
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
entry: './src/index.js',
output: {
filename: 'app.[contenthash:8].js',
},
mode: 'production',
plugins: [
new HtmlWebpackPlugin()
],
}

我們執行 npx webpack 命令后,webpack 額外給我們生成了一個 dist/index.html 文件。該 html 文件格式化后得到的內容為:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Webpack App</title>
<meta name="viewport" content="width=device-width,initial-scale=1">
<script defer="defer" src="app.c8b961ec13a790ae7d15.js"></script>
</head>
<body></body>
</html>

可以看到將打包好的 app.js 文件被自動嵌入到 head 元素下最后一個子元素位置。

這里打包文件名尾部被添加了內容哈希串,這意味著每次項目的內容發生變化,哈希串的值都不同。

試想下,如果你自己管理 html 文件,每次都要改這個 js 文件名,是要多累,還好有 HtmlWebpackPlugin 幫忙。

當然前面這種只是 HtmlWebpackPlugin 插件的默認用法,我們可以做更具體的定制化。

一些常用的屬性

我們需要傳入一個配置對象來進行模板渲染定制化。

HtmlWebpackPlugin 的配置非常豐富,不過常用的就幾個。

plugins: [
new HtmlWebpackPlugin({
title: '前端西瓜哥的博客',
favicon: 'static/favicon.ico',
}),
],

  • titile:設置網頁標題。
  • filename:生成 html 文件名,默認值為 index/html。
  • template:使用自己的模板,這里填這個模板的路徑,使用了之后一些配置項就無效了,比如 title。
  • favicon:指定網站圖標路徑,除了會在 html 上填充 favicon 相關內容,還會將該文件拷貝到打包文件夾下,非常好用。
  • minify:是否壓縮 html 文件。不設置時,如果 webpack 的 mode 為 production,就會壓縮 html,移除多余的空格和注釋之類的。

使用自定義 html 模板

在實際開發中,通常是創建一個 index.html 提供給 HtmlWebpackPlugin 插件作為模板。

這樣的話,title 等配置和一些更細碎的內容就可以直接寫到 html 上。相比配置,直接在 html 上編輯要更直觀些。

我們在根目錄創建一個 index.html 作為模板:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>前端西瓜哥</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body></body>
</html>

這樣就可以直接在 html 模板上添加 title,以及一些 cdn 形式的第三方庫。

webpack.config.js 配置改為:

plugins: [
new HtmlWebpackPlugin({
template: 'index.html'
}),
],

生成的 html 為:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>前端西瓜哥</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script defer src="app.d02c9155f73c92f51bf5.js"></script>
</head>
<body></body>
</html>

第三方庫建議使用自己本地項目的,會更穩定和安全些,比如上面就建議改為<script src="static/jquery-3.6.0.min.js"></script>

這里會用到一個 copy-webpack-plugin 插件將一些文件或文件夾拷貝到打包目錄下。關于這個插件我會另外專門寫一篇文章講解,這里不展開。

自定義 html 注入變量

webpack 支持通過使用 lodash.template() 的方式注入變量。

我們將模板 html 改為下面這樣:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><%= htmlWebpackPlugin.options.title %></title>
</head>
<body>
<%= htmlWebpackPlugin.options.saySomething %>
</body>
</html>

配置改為:

plugins: [
new HtmlWebpackPlugin({
template: 'index.html',
title: '前端西瓜哥的博客',
// 下面這個是自定義屬性
saySomething: 'Stay hungry, stay foolish'
}),
],

將傳入給 HtmlWebpackPlugin 的配置屬性會成為 htmlWebpackPlugin.options 對象下的屬性,嵌入到模板 html 下。

所以這里的生成結果是:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>前端西瓜哥的博客</title>
<script defer src="app.d02c9155f73c92f51bf5.js"></script></head>
<body>
Stay hungry, stay foolish
</body>
</html>

因為使用了 lodash.template 模板渲染豐富,除了可以嵌入變量的值,還支持判斷條件、循環等特性,基本上可以滿足我們的絕大多數場景。

結尾

HTML Webpack Plugin 是被廣泛使用的 webpack 插件,用來將我們打包出來的文件自動嵌入到一個模板 HTML 中。

實際開發中,通常我們會使用自己編寫的 html 模板。

責任編輯:姜華 來源: 今日頭條
相關推薦

2021-12-19 07:21:48

Webpack 前端插件機制

2021-04-30 08:28:15

WebpackLoaderPlugin

2022-03-10 09:00:42

webpack配置項檢驗庫函數

2024-05-27 00:00:01

2020-08-05 08:21:41

Webpack

2022-10-09 08:43:47

H5Webpack代碼

2021-06-22 10:43:03

Webpack loader plugin

2020-09-19 21:26:56

webpack

2020-11-17 08:09:01

webpack配置項腳手架

2024-09-27 11:46:51

2021-12-24 08:01:44

Webpack優化打包

2021-12-15 23:42:56

Webpack原理實踐

2022-02-10 14:23:16

WebpackJavaScript

2021-12-16 22:02:28

webpack原理模塊化

2021-09-06 06:45:06

WebpackMindMasterEntry

2017-07-11 15:50:11

前端webpack2優化

2017-03-24 10:56:21

Webpack技巧建議

2021-06-09 06:05:40

WebpackdevServer 前端開發

2021-12-25 22:29:04

WebpackRollup 前端

2025-03-07 02:00:00

webpackPlugin開發
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 高清av电影| 国产成人精品综合 | 欧美精品一区二区在线观看 | 国产精品1区 | 在线看亚洲| av一区在线观看 | 黄色一级毛片免费看 | 狠狠干美女 | 国产a一区二区 | 福利视频网站 | 国产精品123区 | 亚洲品质自拍视频网站 | 成人精品国产一区二区4080 | 亚洲综合色视频在线观看 | 伊人伊人伊人 | 国产成人精品一区二三区在线观看 | 91亚洲国产成人精品一区二三 | 久久精品欧美一区二区三区不卡 | 国产精品日韩欧美一区二区三区 | www.久久国产精品 | 一区二区三区视频在线观看 | www.yw193.com| 久久99一区二区 | 久久精品99 | 在线国产小视频 | 国产欧美一区二区精品久导航 | 欧美成人一级 | 久久久久久久一区二区三区 | 欧美成人aaa级毛片在线视频 | 国产成人精品一区 | 欧美一区免费 | 日本不卡一区二区三区 | 日韩在线视频一区 | 欧美日韩一区二区三区不卡视频 | 午夜视频在线观看网址 | 国产精品日日摸夜夜添夜夜av | 7777精品伊人久久精品影视 | 国产精品国产精品国产专区不卡 | 亚洲一区二区在线视频 | 91精品国产一区二区三区 | 国产亚洲一区二区三区在线观看 |