浅谈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 相关文章推荐
一段效率很高的for循环语句使用方法
Aug 13 Javascript
My Desktop :) 桌面式代码
Dec 29 Javascript
javascript基于DOM实现权限选择实例分析
May 14 Javascript
JavaScript从0开始构思表情插件
Jul 26 Javascript
jquery自动补齐功能插件flexselect用法示例
Aug 06 Javascript
JS中的hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()
Aug 11 Javascript
在一个页面重复使用一个js函数的方法详解
Dec 26 Javascript
微信小程序 devtool隐藏的秘密
Jan 21 Javascript
JS+html5制作简单音乐播放器
Sep 13 Javascript
微信小程序movable view移动图片和双指缩放实例代码
Aug 08 Javascript
JavaScript判断变量名是否存在数组中的实例
Dec 28 Javascript
动态加载JavaScript文件的3种方式
May 05 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
yii框架源码分析之创建controller代码
2011/06/28 PHP
YII CLinkPager分页类扩展增加显示共多少页
2016/01/29 PHP
Zend Framework教程之模型Model基本规则和使用方法
2016/03/04 PHP
Zend Framework教程之Application用法实例详解
2016/03/14 PHP
特殊字符、常规符号及其代码对照表
2006/06/26 Javascript
JQuery 表单中textarea字数限制实现代码
2009/12/07 Javascript
jQuery 类twitter的文本字数限制带提示效果插件
2010/04/16 Javascript
JQuery 选择和过滤方法代码总结
2010/11/19 Javascript
JS动态插入并立即执行回调函数的方法
2016/04/21 Javascript
基于js里调用函数时,函数名带括号和不带括号的区别
2016/07/28 Javascript
AngularJS基础 ng-click 指令示例代码
2016/08/01 Javascript
JS表格组件BootstrapTable行内编辑解决方案x-editable
2016/09/01 Javascript
轻松实现jquery选项卡切换效果
2016/10/10 Javascript
分享javascript、jquery实用代码段
2016/10/20 Javascript
详解jQuery的表单验证插件--Validation
2016/12/21 Javascript
Bootstrap 轮播(Carousel)插件
2016/12/26 Javascript
layer弹窗插件操作方法详解
2017/05/19 Javascript
React Native如何消除启动时白屏的方法
2017/08/08 Javascript
使用vuepress搭建静态博客的示例代码
2019/02/14 Javascript
jQuery 选择器用法基础入门示例
2020/01/04 jQuery
Vue-CLI与Vuex使用方法实例分析
2020/01/06 Javascript
vue中英文切换实例代码
2020/01/21 Javascript
Python使用progressbar模块实现的显示进度条功能
2018/05/31 Python
Python基于滑动平均思想实现缺失数据填充的方法
2019/02/21 Python
python实现对输入的密文加密
2019/03/20 Python
python使用time、datetime返回工作日列表实例代码
2019/05/09 Python
韩国11街:11STREET
2018/03/27 全球购物
澳大利亚百货商店中销量第一的商务衬衫品牌:Van Heusen
2018/07/26 全球购物
PatPat德国:妈妈的每日优惠
2019/10/02 全球购物
美容院店长岗位职责
2014/04/08 职场文书
四风批评与自我批评范文
2014/10/14 职场文书
文言文辞职信
2015/02/28 职场文书
应收账款管理制度
2015/08/06 职场文书
2016年公务员六五普法心得体会
2016/01/21 职场文书
Redis集群的关闭与重启操作
2021/07/07 Redis
Python Pandas 删除列操作
2022/03/16 Python