之前运行dist下的js,都是手动把index.html拷贝过去的,每次把dist文件夹删除,都需要将index.html拷贝进去,这样很麻烦,我们在webpack官方插件中找到HtmlWebpackPlugin
module.exports = {
  /**
  * 打包模式,不配置会警告,但底层还是会去配置默认的,就是production
  * production: 压缩模式,被压缩的代码
  * development: 开发模式,不压缩的代码
  *
  */
  mode: 'development',
  // 这个文件要做打包,从哪一个文件开始打包
  entry: './src/index.js',   plugins: [new HtmlWebpackPlugin()],
  // 打包文件要放到哪里去,就配置在output这个对象里
  output: {
    // 打包好的文件名字
    filename: 'bundle.js',
    /**
    * 打包出的文件要把他放到哪一个文件夹下,path后面要放一个绝对路径
    * __dirname指的是webpack.config.js所在的当前目录的这个路径
    * 下面这个结合就是一个绝对路径
    */
    path: path.resolve(__dirname, 'dist')
  }
}
这样配置好,再去打包,发现会自动生成一个index.html,
index.html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Webpack App</title>
  </head>
<body>
  <script type="text/javascript" src="bundle.js"></script></body>
</html>

html里面还引入了bundle.js。而且在src里面我并没有这个index.html.这就是webpack里面插件的作用

HtmlWebpackPlugin这个插件能干什么呢?HtmlWebpackPlugin会在打包结束后,自动生成一个html文件,并把打包生成的js自动引入到这个html文件中
我们再打开index.html,发现网页上什么也没有。为什么呢?
我们看自己的代码逻辑
index.js
var root = document.getElementById('root');
import './index.scss'; root.innerHTML = '<div class="iconfont iconfangdajing">abc</div>';
代码逻辑是找到id为root到节点,再把abc挂在到root上。但是我们看index.html并没有root这个标签。所以说明用webpack生成到这个html,少了一个id为root的标签。那我想让他自动生成这个id为root的标签,怎么办,可以对这个html-webpack-plugin做一个配置
plugins: [new HtmlWebpackPlugin({
  template: 'src/index.html'
})],
然后在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>html template</title>
  </head>
  <body>
    <div id='root'></div>
  </body>
</html>
然后运行npm run bundle,打开自动生成的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>html template</title>
  </head>
  <body>
    <div id='root'></div>
    <script type="text/javascript" src="bundle.js"></script>
  </body>
</html>

可以惊讶的看到id为root的标签插入进去了。这是为什么呢?

html-webpack-plugin会自动生成一个html,这个html是以哪个模版生成的呢,是src下面的index.html为模板生成的。生成之后,会把打包出来bundle.js注入到html中。
通过这个例子,我们说明一下webpack中plugin的作用。
plugin可以在webpack运行到某个时刻的时候,帮你做一些事情。这个很像生命周期函数的定义。这个时刻是什么时刻呢,就是webpack打包结束的时刻。其它的插件也会在某些时刻做一些事情,比如刚打包的时刻。比如打包js的某个时刻。再举个例子。。
我们现在打包好的名字叫bundle.js,现在我改一下,叫做dist.js
output: {
  filename: 'dist.js',
  path: path.resolve(__dirname, 'dist')
}
然后重新打包,然后dist目录下会多出一个dist.js文件,html里面自动引入的也是dist.js文件。但是我们看bundle.js的文件依然存在,为什么呀,一个是我们刚才没有删除dist,再打包,但每次打包都需要删除一下,会很麻烦。我们希望每次打包的时候,自动将dist删除,这样就不会有上次遗留的东西了。现在就需要另外一个插件,在官网webpack下找不到,叫做clean-webpack-plugin
先安装
npm install clean-webpack-plugin -D
装好之后,我们去增加配置
plugins: [
  new HtmlWebpackPlugin({
    template: 'src/index.html'
  }), new CleanWebpckPlugin()
],
这个意思是在打包之前先删除掉dist这个文件夹。这样运行npm run bundle,之前bundle.js就不在了。

使用plugins让打包更便捷的更多相关文章

  1. 更便捷的Mybatis增强插件——EasyMybatis

    easy-mybatis是一个对Mybatis的增强框架(插件).在Spring集成Mybatis的基础上,将项目开发中对数据库的常用操作统一化.使用本框架可以很便捷的对数据库进行操作,提高开发效率, ...

  2. 微信公众平台自定义菜单新增扫一扫、发图片、发位置 LBS运作更便捷

    今天微信公众平台发布更新,自定义菜单新增扫一扫.发图片.发送位置等功能,这对于有意挖掘微信LBS服务的运营者来说更便捷了,订阅号不用返回微信界面就能扫图.发送图片.调用地理位置,用户体验更友好,自然也 ...

  3. 更便捷的css处理方式-postcss

    更便捷的css处理方式-PostCSS 一般来说介绍一个东西都是要从是什么,怎么用的顺序来讲.我感觉这样很容易让大家失去兴趣,先看一下postcss能做点什么,有兴趣的话再往下看,否则可能没有耐心看下 ...

  4. Android源码浅析(三)——Android AOSP 5.1.1源码的同步sync和编译make,搭建Samba服务器进行更便捷的烧录刷机

    Android源码浅析(三)--Android AOSP 5.1.1源码的同步sync和编译make,搭建Samba服务器进行更便捷的烧录刷机 最近比较忙,而且又要维护自己的博客,视频和公众号,也就没 ...

  5. HarmonyOS新能力让数据多端协同更便捷,数据跨端迁移更高效!

    作者:yijian,终端OS分布式文件系统专家:gongashi,终端OS分布式数据管理专家 HarmonyOS作为分布式操作系统,其分布式数据管理能力非常重要.我们也一直围绕持续为开发者带来全局&q ...

  6. 更便捷的Android多渠道打包方式

    本文先回顾了以往流行的多渠道打包方式,随后引入的mcxiaoke的packer-ng-plugin项目,介绍该项目在实际应用(配合友盟统计)中如何解决更方便的Android多渠道打包问题 多渠道打包方 ...

  7. 【读书笔记】【深入理解ES6】#5-解构:使数据访问更便捷

    ES6为对象和数组都添加了解构功能,将数据解构打散的过程变得更简单,可以从打散后更小的部分中获取所需信息. 对象解构 let node = { type: "Identifier" ...

  8. 使用alias让命令行更便捷

    在linux命令行上调试程序,经常是这样子做: $ ps x | grep sceneserver pts/ S+ : grep sceneserver ? Ssl : ./sceneserver/s ...

  9. 融云红包全新升级,让App用户更便捷地用“钱”交流感情!

    随着移动互联网的飞速发展,如何增强社交关系.留住用户的心已成为移动社交化时代各类App持续探索的问题,除了接入即时通讯的能力,众多社交平台开始通过趣味性十足的红包功能为App中的社交场景赋能.当即时通 ...

随机推荐

  1. C++类数组的实现

    请看下面的代码: //xy_3_1 2013/10/26 #include<stdio.h> #include<iostream.h> #include<string.h ...

  2. 面向对象(基础oop)之属性与构造函数

    大家好,我叫李京阳,,很高兴认识大家,之所以我想开一个自己的博客,就是来把自己所了解的知识点通过自己的话写一下,希望被博客园的朋友们点评和一起讨论一下,也希望从博客园中多认识一些软件开发人员!现在我开 ...

  3. K:栈和队列的比较

    栈和队列的相同点: 都是线性结构,即数据元素之间具有"一对一"的逻辑关系 都可以在顺序存储结构和链式存储结构上进行实现 在时间代价上,插入和删除操作都需常数时间:在空间代价上,情况 ...

  4. python学习之老男孩python全栈第九期_day019作业

    # 计算时间差 import time start_time = time.mktime(time.strptime('2017-09-11 08:30:00','%Y-%m-%d %H:%M:%S' ...

  5. git 之奇技淫巧

    1,git remote prune origin  本地有很多其实早就被删除的远程分支,可以用 git remote prune origin 全部清除掉,这样再 checkout 别的分支时就清晰 ...

  6. JQuery 判断指定ID是否存在

  7. AIX 6.1记录

    安装Oracle需要开启远程桌面进行访问 1. X Windows需要如下软件包才能正常运行 lslpp -l X11.apps.rte X11.apps.xterm X11.base.rte X11 ...

  8. js 判断 复选框全选、全不选、反选、必选一个

    一个挺 使用的 js 代码片段,  判断  复选框全选.全不选.反选.必选一个 记录下, 搬来的 思路: 修改数据的 选中与否状态, 拿到所有的输入框,看是否有选中的状态 <html> & ...

  9. LoadRunner对移动互联网后端服务器压力测试

    一.LoadRunner简介 LoadRunner,是惠普公司研发的一款预测系统行为和性能的负载测试工具.通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner能够 ...

  10. 创建基于 AFS 的 Docker 容器卷

    标准的 Docker 容器卷一般是位于 Docker 主机上的一个本地目录.在这样的配置下,容器必须依赖于一台特定的主机,因此使得容器的迁移和扩展变得困难.通过使用容器卷插件,能让容器访问独立于主机的 ...