之前运行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. OpenFileDialog 打开文件对话框

    InitialDirectory 对话框的初始目录 Filter 要在对话框中显示的文件筛选器,例如,"文本文件(*.txt)|*.txt|所有文件(*.*)||*.*" Filt ...

  2. 使用auth_request模块实现nginx端鉴权控制

    使用auth_request模块实现nginx端鉴权控制 nginx-auth-request-module 该模块是nginx一个安装模块,使用配置都比较简单,只要作用是实现权限控制拦截作用.默认高 ...

  3. 使用nodeJs在本地搭建最简单的服务

    在搭建web服务器之前,需要先安装node.js 安装后node.js,接下来就需要安装http的镜像文件 一:本机安装软件 下载最新的NodeJs,进行安装.一直点击下一步就可以了.然后就可以查看安 ...

  4. 标准Trie字典树学习二:Java实现方式之一

    特别声明: 博文主要是学习过程中的知识整理,以便之后的查阅回顾.部分内容来源于网络(如有摘录未标注请指出).内容如有差错,也欢迎指正! 系列文章: 1. 标准Trie字典树学习一:原理解析 2.标准T ...

  5. 【SSH网上商城项目实战04】EasyUI菜单的实现

    转自:https://blog.csdn.net/eson_15/article/details/51297705 上一节我们使用EasyUI搭建了后台页面的框架,这一节我们主要使用EasyUI技术简 ...

  6. hdu 2049 考新郎

    假设一共有N对新婚夫妇,其中有M个新郎找错了新娘,求发生这种情况一共有多少种可能. 和之前那道题一样,是错排,但是要乘上排列数. 选对的人有C(N,M)个组合,将它们排除掉,剩下的人就是错排了 #in ...

  7. JavaScript中各存在性函数

    JavaScript中有很多表示存在性和从属关系的函数,本文介绍如下几个: 1)有关实例与构造函数原型之间的关系:isPrototypeOf(),Object.getPrototypeOf(); 2) ...

  8. vue如何下载报表

    _export() { const _c = this.$createElement; this.$msgbox({ title: '请确认', showCancelButton: true, con ...

  9. Html5 填表 表单(二) input type 各种输入, 各种用户选择,上传等等泛输入用户交互

    <input>        无限制输入     type    限制输入 type = 如下类型     type 后还可以跟一些属性: 如<input type=text max ...

  10. drupal7 获取当前使用的主题的名称

    直接引用全局变量就行: 参考: 代码测试: global $theme, $theme_key; echo $theme; echo '<br>'; echo $theme_key; 结果 ...