浅谈webpack构建工具配置和常用插件总结


Posted in Javascript onMay 11, 2020

webpack构建工具已经火了好几年,也是当下狠火狠方便的构建工具,我们没有理由不去学习。既然选择webpack就要跟着时代走,我们要追随大牛的步伐,大牛等等我。

一、webpack基础

  1. 在根目录使用npm init 命令创建package.json,创建过程中一路回车。
  2. 本地安装webpack命令:npm install webpack webpack-cli --save-dev 安装成功后写入package.js的devDependencies中,可以通过 npm node_modules/.bin/webpack -v 命令查看它的版本。
  3. 全局安装npm install -g webpack 不推荐全局安装 webpack。它会把你的项目锁定全局安装的版本,也可能导致不同的webpack版本中构建失败。

静态资源文件目录

  • ​ ? src [ 项目源文件目录 ]
  • ​ ? dist [ 打包文件目录 ]
  • ​ ? webpack.config.js [ webpack配置文件 ]
  • ​ ? package.json [ NPM包管理配置文件 ]
  • ​ ? node_modules [ 项目中的依赖存放目录 ]

二、webpack.config.js

const webpack = require('webpack');
module.exports = {
 mote:"development",//指当前的环境
 /*
 development:开发环境
 production:生产环境
 none:不做任何处理
 */
 //入口文件,如果需求多个入口可改为对象
  entry: './src/index.js',
  /*
  hot配置是否启用模块的热替换功能,devServer的默认行为是在发现代码被改后通过自动刷新整个页面来做到事实预览,然后设置hot后,
  会在不刷新整个页面的情况下用新模块替换老模块来做到实时更新。
  如果选用hot:true方式来达到热更新的效果需要引用webpack.HotModuleReplacementPlugin插件配合达到你需要的效果,另外推荐一
  种简便的方式在package.json中scripts设置如下
  "scripts": {
   "start": "webpack-dev-server --hot --inline",
  },
  */
  // 服务器环境
  devServer: {
   hot: true, //建议使用第二种方案 启动服务使用命令 npm run start
   port:"8080",//端口默认8080,可以自行设置
   host:"192.168.xx.xx",
   /*
   host配置devServer服务监听的地址,也可以使用localhost进行访问 浏览器输入192.168.xx.xx/index.html
   简便方法在package.json中设置如下
   "scripts": {
   "start": "webpack-dev-server --hot --inline ",
   },
   */
   
  },
  //插件
  plugins: [
   //热加载插件
   new webpack.HotModuleReplacementPlugin(), 
  ],
  //输出
  output: {
   //filename:输出的文件名,可以自定义一些规则
   filename: '[name].bundle.js',
   //path,配置输出文件存放在本地的目录
   path: path.resolve(__dirname, 'dist')
  }
 };

三、插件

1、HtmlWebpackPlugin

const HtmlWebpackPlugin = require('html-webpack-plugin')
 plugins: [
  new HtmlWebpackPlugin({ // 打包输出HTML
   title: 'Hello World',//文件的标题
   minify: { //minify 的作用是对 html 文件进行压缩
    removeComments: true, // 移除HTML中的注释
    collapseWhitespace: true, // 删除空白符与换行符
    minifyCSS: true, // //是否压缩html里的css 默认值false;
    caseSensitive: true, //是否对大小写敏感,默认false
    ollapseWhitespace: true, //是否去除空格,默认false
    minifyJS: true, //是否压缩html里的js
    removeAttributeQuotes: true, //是否移除属性的引号 默认false
    removeComments: true, //是否移除注释 默认false
    emoveCommentsFromCDATA: true, //从脚本和样式删除的注释 默认false
    emoveEmptyAttributes: true, //是否删除空属性,默认false
    removeRedundantAttributes: true, //删除多余的属性
    removeScriptTypeAttributes: true, //删除script的类型属性,在h5下面script的type默认值:text/javascript 默认值false
   },
   filename: 'index.html', //输出的html的文件名称
   template: 'index.html', //html模板在的文件路径
   hash: true,//hash作用是给生成的js文件一个独特的hash值,默认值为false 被构建过后的html引用js效果如下
   // <script type=text/javascript src=bundle.js?22b9692e22e7be37b57e></script>
  }),
 ]

2、CleanWebpackPlugin

const { CleanWebpackPlugin } = require('clean-webpack-plugin');
plugins: [
  //该插件主要用于自动删除webpack里dist目录中已不需要的文件
  new CleanWebpackPlugin()
]

官方介绍:

By default, this plugin will remove all files inside webpack's output.path directory, as well as all unused webpack assets after every successful rebuild

3、ExtractTextWebpackPlugin

先把我们需要的东西下载好

npm install webpack css-loader style-loader extract-text-webpack-plugin --save-dev

首先配置webpack,先不使用插件完成

module.exports = {
 module : {
    rules: [
      {
        test: /\.css$/,
        use:[
          { loader: "style-loader" },
          { loader: "css-loader" }
        ]
      }
    ]
  }
}

配置好之后在js入口文件中引入样式文件,打包查看打包结果bundle.js,会发现css被打包到了js里面,以字符串的形式存在。如果index.html中已引入打包后的bundle.js,使用浏览器打开index.html文件会发现css以style的形式被插到了head当中。

2.使用插件

const path = require('path');
const ExtractTextPlugin = require("extract-text-webpack-plugin");
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
 module : {
  rules: [
    {
      test: /\.css$/,
      use : ExtractTextPlugin.extract({
       fallback: "style-loader",
        use: "css-loader"
      })
    }
    /*
  use: 指需要什么样的loader去编译文件
  fallback: 编译后用什么loader来提取css文件
  */
   ]
 },
 plugins: [
   new ExtractTextPlugin("styles.css"),
   new HtmlWebpackPlugin({ // 关于HtmlWebpackPlugin上文有提到
      title: 'extract-text-webpack-plugin',
      filename: 'index.html',
      template: path.resolve(__dirname, 'index.html'),
      inject : 'head'
    })
 ]
}

以上内容配置好之后打包查看,可以发现css文件以link的方式被引在index.html的head中。期间配合HtmlWebpackPlugin插件自动插入index.html中

到此这篇关于浅谈webpack构建工具配置和常用插件总结的文章就介绍到这了,更多相关webpack构建工具配置和常用插件内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
学习jquery之一
Apr 27 Javascript
jQuery live( type, fn ) 委派事件实现
Oct 11 Javascript
Javascript绝句欣赏 一些经典的js代码
Feb 22 Javascript
浅谈jQuery this和$(this)的区别及获取$(this)子元素对象的方法
Nov 29 Javascript
jQuery Mobile漏洞会有跨站脚本攻击风险
Feb 12 Javascript
微信小程序 开发MAP(地图)实例详解
Jun 27 Javascript
js实现前端图片上传即时预览功能
Aug 02 Javascript
十分钟带你快速了解React16新特性
Nov 10 Javascript
vue实现动态添加数据滚动条自动滚动到底部的示例代码
Jul 06 Javascript
详解ES6 export default 和 import语句中的解构赋值
May 28 Javascript
对TypeScript库进行单元测试的方法
Jul 18 Javascript
Angular6项目打包优化的实现方法
Dec 15 Javascript
只有 20 行的 JavaScript 模板引擎实例详解
May 11 #Javascript
ES6使用新特性Proxy实现的数据绑定功能实例
May 11 #Javascript
JavaScript异步操作的几种常见处理方法实例总结
May 11 #Javascript
Nuxt默认模板、默认布局和自定义错误页面的实现
May 11 #Javascript
Vue.js获取手机系统型号、版本、浏览器类型的示例代码
May 10 #Javascript
vue总线机制(bus)知识点详解
May 10 #Javascript
vue路由跳转传递参数的方式总结
May 10 #Javascript
You might like
php下拉选项的批量操作的实现代码
2013/10/14 PHP
PHP操作MongoDB实现增删改查功能【附php7操作MongoDB方法】
2018/04/24 PHP
javascript小数计算出现近似值的解决办法
2010/02/06 Javascript
javascript父、子页面交互技巧总结
2014/08/08 Javascript
JS和JQ的event对象区别分析
2014/11/24 Javascript
jquery插件bxslider用法实例分析
2015/04/16 Javascript
jQuery prototype冲突的2种解决方法(附demo示例下载)
2016/01/21 Javascript
jQuery Mobile开发中日期插件Mobiscroll使用说明
2016/03/02 Javascript
基于jQuery实现表格的排序
2016/12/02 Javascript
前端构建工具之gulp的配置与搭建详解
2017/06/12 Javascript
vue.js异步上传文件前后端实现代码
2017/08/22 Javascript
详解bootstrap导航栏.nav与.navbar区别
2017/11/23 Javascript
Node.js assert断言原理与用法分析
2019/01/04 Javascript
uni-app使用微信小程序云函数的步骤示例
2020/05/22 Javascript
Python的函数的一些高阶特性
2015/04/27 Python
python实现数据预处理之填充缺失值的示例
2017/12/22 Python
python实现日志按天分割
2019/07/22 Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
2020/02/03 Python
Python 基于FIR实现Hilbert滤波器求信号包络详解
2020/02/26 Python
浅谈ROC曲线的最佳阈值如何选取
2020/02/28 Python
python字符串常用方法及文件简单读写的操作方法
2020/03/04 Python
python+Selenium自动化测试——输入,点击操作
2020/03/06 Python
浅谈css3中的渐进增强和优雅降级
2017/12/01 HTML / CSS
世界上最大的在线汽车租赁预订平台:Rentalcars.com(支持中文)
2018/10/12 全球购物
蒙蒂塞罗商店:Monticello Shop
2018/11/25 全球购物
一套C#面试题
2013/10/09 面试题
关于保护环境的建议书
2014/08/26 职场文书
爱祖国爱家乡演讲稿
2014/09/02 职场文书
2014最新版群众路线四风整改措施
2014/09/24 职场文书
离婚协议书范文2014(夫妻感情破裂)
2014/12/14 职场文书
思想道德自我评价2015
2015/03/09 职场文书
2015年学习部工作总结范文
2015/03/31 职场文书
春季运动会加油词
2015/07/18 职场文书
医务人员岗前培训心得体会
2016/01/08 职场文书
Redis 哨兵集群的实现
2021/06/18 Redis
Go 语言中 20 个占位符的整理
2021/10/16 Golang