webpack中html-webpack-plugin 与 clean-webpack-plugin

在webpack中,loader用于转换某些类型的模块,而插件则可以用于执行范围更广的任务。包括:打包优化、资源管理、注入环境变量。

想要使用一个插件,首先要 <span style="background: yellow"> require </span>它,然后把它添加到<span style="background: yellow"> plugins </span>数组中。多数插件可以通过选项(option)自定义。

环境

主要配置

webpack : v4.26.0

webpack-cli: v3.1.2

"devDependencies": {
    "autoprefixer": "^9.3.1",
    "clean-webpack-plugin": "^1.0.0",
    "css-loader": "^1.0.1",
    "cssnano": "^4.1.10",
    "file-loader": "^4.0.0",
    "html-webpack-plugin": "^3.2.0",
    "node-sass": "^4.14.1",
    "postcss-loader": "^2.0.1",
    "sass-loader": "^7.1.0",
    "style-loader": "^0.23.1",
    "url-loader": "^4.1.1",
    "webpack": "^4.26.0",
    "webpack-cli": "^3.1.2"
  },

一、html-webpack-plugin

HtmlWebpackPlugin 简化了HTML文件的创建,以便为webpack包提供服务。这对于在文件名中包含每次会随着编译而发生变化哈希的webpack bundle 尤其有用(不用每次都手动的去移动主题HTML以及每次都更改引入的资源名称【js等】),我们可以让插件为我们生成一个HTML文件。

安装

npm install html-webpack-plugin -D

基本效果

    该插件会自动生成一个HTML5文件,其中包括使用 `script` 标签的 body 中的所有 webpack 包。

基本使用配置

在webpack.config.js 中,plugins属性接受一个数组,我们可以把各个插件写入数组当中。
// webpack.config.js
plugins: [
  new HtmlWebpackPlugin({
    title: '测试title属性', 
    filename: 'zhv.html', 
    template: 'src/index.html',
    chunks: ['index'], 
    })
]

配置解析(options)

excludeChunks:arry, 和chunks相反,排除掉某些js文件。

inject: boolean或string, 注入选项。 true, body, head, false。 true 和 body是把js插入到body的底部,head是把js放到head中。false,只是生成html文件,不引入js。默认为true。

favicon: string, 给生成文件生成一个favicon,属性值为favicon文件所在的路径名。

minify: boolean或object, 设置静态资源压缩情况。 如果mode 设置为 production默认为true, 否则为false。

hash:boolean, 默认为false。

cathe: boolean,设置js、css文件的缓存,当文件没有发生变化时,是否设置使用缓存。默认为true

shoErrors: boolean, 当文件发生错误时,是否将错误显示在页面上。

属性名 字段类型 默认值 说明
title String Webpack App html标题,需要在html模板的title标签内 输入 <%= htmlWebpackPlugin.options.title %>
filename String index.html 生成 html 文件的文件名,生成文件的跟路径为ouput.path的目录。生成多个文件的时候,需要在plugins中使用多次HtmlWebpackPlugin
template String 生成fliename文件的模板,生成多个文件的时候,需要在plugins中使用多次HtmlWebpackPlugin,与filename的路径不同,这里的路径为根路径。
chunks Array 全部js文件 chunks 选项的作用主要是针对多入口(entry)文件。当你有多个入口文件的时候,对应就会生成多个编译后的 js 文件。那么 chunks 选项就可以决定是否都使用这些生成的 js 文件。
excludeChunks Array 和chunks相反,排除掉某些js文件
inject Boolean String true 注入选项。 true, body, head, false。 true 和 body是把js插入到body的底部,head是把js放到head中。false,只是生成html文件,不引入js。
favicon String 给生成文件生成一个favicon,属性值为favicon文件所在的路径名。
minify Boolean Object 如果mode 设置为 production默认为true, 否则为false。 设置静态资源压缩情况,可选配置项:{ collapseWhitespace: true, removeComments: true, removeRedundantAttributes: true, removeScriptTypeAttributes: true, removeStyleLinkTypeAttributes: true, useShortDoctype: true }
hash Boolean false 如果为真,则向所有包含的js和css文件附加一个唯一的 webpack编译散列。这对于更新每次的缓存文件名称非常有用。
cathe Boolean true 设置js、css文件的缓存,当文件没有发生变化时,是否设置使用缓存
shoErrors Boolean true 当文件发生错误时, 是否将错误显示在页面

二、clean-webpack-plugin

我们每次打包的时候,总是先手动删除dist文件夹来确保结果为最新状态。可能有些人并没有这个困扰,可能是因为并没有在filename属性上加入hash值,这个时候我们就需要用到clean-webpack-plugin

安装

npm install clean-webpack-plugin --save-dev

基本效果

clean-webpack-plugin是用来在每次编译时删除之前所构建出来的文件,接着才生成编译结果。

基本使用配置

低版本需要指定文件夹名称

// webpack.config.js
const CleanWebpackPlugin = require('clean-webpack-plugin')
plugins: [
    new CleanWebpackPlugin(['dist']),
]

高版本直接声明一下即可。

// webpack.config.js
const CleanWebpackPlugin = require('clean-webpack-plugin')
plugins: [
    new CleanWebpackPlugin()
]

比较有用的参数

verbose: Boolean , 是否将日志写入控制台, 默认为 false

// webpack.config.js
const CleanWebpackPlugin = require('clean-webpack-plugin')
plugins: [
    new CleanWebpackPlugin({
        verbose: true
    })
]

cleanOnceBeforeBuildPatterns: 可传递选项指定并删除目录下的所有档案。

const { CleanWebpackPlugin } = require('clean-webpack-plugin');

module.exports = {
  plugins: [
    new CleanWebpackPlugin({
      cleanOnceBeforeBuildPatterns: ['**/*'], // 预设值 (相对于 output.path 指定目录下)
    }),
  ],
};

假如我们想在删除的范围内保留特定档案,例如我们想删除 output.path上一层目录下的所有的.json 文件,但是想保留 package.jsonpackage-lock.json,我们可以使用 !排除文件。

const { CleanWebpackPlugin } = require('clean-webpack-plugin');
module.exports = {
  plugins: [
    new CleanWebpackPlugin({
      cleanOnceBeforeBuildPatterns: [
        '**/*',
        path.resolve(__dirname, '*.json'),
        `!${path.resolve(__dirname, 'package*')}`,
      ],
    }),
  ],
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354

推荐阅读更多精彩内容