浅谈webpack4.x 入门(一篇足矣)


Posted in Javascript onSeptember 05, 2018

前言:

webpack4出了以后,一些插件变化很大,和之前的版本使用方式不一样,新手入坑,本篇将介绍如何从一开始配置webpack4的开发版本,对css,js进行编译打包合并生成md5,CSS中的图片处理,js自动注入html页,删除指定文件,提取公共文件,热更新等等。

安装

//全局安装 
npm install -g webpack webpack-cli

创建文件夹初始化

//创建文件夹
mkdir webpack4demo
//进入
cd webpack4demo
//初始化
npm init -y

创建文件夹scripts 里面创建index.js文件

index.js

const s=()=>{ 
console.log('s init')
}
s()

创建webpack.config.js文件

webpack.config.js

const path = require("path");
module.exports = {
 entry: {
 index: "./scripts/index.js" //入口文件,若不配置webpack4将自动查找src目录下的index.js文件
 },
 output: {
 filename: "[name].bundle.js",//输出文件名,[name]表示入口文件js名
 path: path.join(__dirname, "dist")//输出文件路径
 }
}

执行webpack --mode development将会生成dist/index.bundle.js

浅谈webpack4.x 入门(一篇足矣)

创建index.html,并引入js

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>$Title$</title>
</head>
<body>
$END$
</body>
<script src="./dist/index.bundle.js"></script>
</html>

打开浏览器将会看到之前设置的js文件生效

浅谈webpack4.x 入门(一篇足矣)

对css,js进行编译打包合并生成md5

创建a.js,c.js,a.css,更改index.js

a.js

import acss from './a.css'
import c from './c.js'
const a={
 init(){
 console.log("a init bbbaaa")
 },
 cinit(){
 c.init()
 }
}
export default a;

c.js

const c={
 init(){
 console.log("ccccc")
 }
}
export default c;

a.css

body{ 
 background-color: #6b0392;
}

index.js

import a from './a.js'
import c from './c.js'
const s=()=>{
 a.init()
 a.cinit()
 c.init()
 console.log('s init')
}
s()

配置webpack.config.js文件

const path = require("path");
module.exports = {
 entry: {
 index: "./scripts/index.js"
 },
 output: {
 filename: "[name].bundle.[hash].js",//[hash]会在后面生成随机hash值
 path: path.join(__dirname, "dist")
 },
 module: { // 处理对应模块
 rules: [
  {
  test: /\.css$/,
  use: [ 'style-loader', 'css-loader' ]//处理css
  }
 ]
 },
}

安装style-loader, css-loader

npm install style-loader css-loader --save-dev

执行webpack --mode development将会看到一个带md5值得js文件,将他引入html中

 浅谈webpack4.x 入门(一篇足矣)

CSS中的图片处理

安装url-loader, file-loader

npm install url-loader file-loader --save-dev

修改a.css 将一张图片放到scripts目录

body{
 background-image: url("./timg.jpg");
 background-color: #a748ca;
}

配置webpack.config.js文件

module: {
 rules: [
 {
  test: /\.css$/,
  use: [ 'style-loader', 'css-loader' ]
 },
 {
  test:/\.(png|jpg|gif)$/,
  use:[{
  loader:'url-loader',
  options:{
   outputPath:'images/',//输出到images文件夹
   limit:500 //是把小于500B的文件打成Base64的格式,写入JS
  }
  }]
 }
 ]
},

执行webpack --mode development将会看到dist中有一个images文件夹中有一张图片,打开index.html

 浅谈webpack4.x 入门(一篇足矣)

js自动注入html文件

使用插件html-webpack-plugin,可以将生成的js自动引入html页面,不用手动添加

//安装html-webpack-plugin
npm install html-webpack-plugin --save-dev
//安装webpack webpack-cli
npm install webpack webpack-cli --save-dev

配置webpack.config.js文件

const path = require("path");
const HtmlWebpackPlugin = require('html-webpack-plugin');//引入html-webpack-plugin
module.exports = {
 entry: {
 index: "./scripts/index.js"
 },
 output: {
 filename: "[name].bundle.[hash].js",
 path: path.join(__dirname, "dist")
 },
 module: {
 rules: [
  {
  test: /\.css$/,
  use: [ 'style-loader', 'css-loader' ]
  }
 ]
 },
 plugins: [// 对应的插件
 new HtmlWebpackPlugin({ //配置
  filename: 'index.html',//输出文件名
  template: './index.html',//以当前目录下的index.html文件为模板生成dist/index.html文件
 }),
 ]
}

执行webpack --mode development 记得要讲之前手动引入的script删除,便可以看到dist那里自动生成一个index.html,打开便可以看到。

删除指定文件

使用插件clean-webpack-plugin,删除指定文件,更多配置,查看clean-webpack-plugin

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

配置webpack.config.js文件

const CleanWebpackPlugin = require('clean-webpack-plugin');//引入 
plugins: [// 对应的插件
 new HtmlWebpackPlugin({ //配置
  filename: 'index.html',//输出文件名
  template: './index.html',//以当前目录下的index.html文件为模板生成dist/index.html文件
 }),
 new CleanWebpackPlugin(['dist']), //传入数组,指定要删除的目录
 ]

执行webpack --mode development,可以看到dist目录被删除,又生成一个新的dist,之前的js文件已经被删除。

提取公共文件

我们可看到a.js和index.js都引入了c.js文件,为什么要提取公共代码,简单来说,就是减少代码冗余,提高加载速度。和之前的webpack配置不一样:

//之前配置
// new webpack.optimize.SplitChunksPlugin({
// name: 'common', // 如果还要提取公共代码,在新建一个实例
// minChunks: 2, //重复两次之后就提取出来
// chunks: ['index', 'a'] // 指定提取范围
// }),
//现在配置
optimization: {
 splitChunks: {
 cacheGroups: {
  commons: { // 抽离自己写的公共代码
  chunks: "initial",
  name: "common", // 打包后的文件名,任意命名
  minChunks: 2,//最小引用2次
  minSize: 0 // 只要超出0字节就生成一个新包
  },
  vendor: { // 抽离第三方插件
  test: /node_modules/, // 指定是node_modules下的第三方包
  chunks: 'initial',
  name: 'vendor', // 打包后的文件名,任意命名
  // 设置优先级,防止和自定义的公共代码提取时被覆盖,不进行打包
  priority: 10
  },
 }
 }
},

下载jq npm install jquery --save 在a.js,index.js引用 import $ from 'jquery' 输出$

生成3个js文件,执行webpack --mode development

浅谈webpack4.x 入门(一篇足矣) 

浅谈webpack4.x 入门(一篇足矣)

热更新,自动刷新

我们将用到webpack-dev-serve,webpack-dev-server就是一个基于Node.js和webpack的一个小型服务器,它有强大的自动刷新和热替换功能。

安装webpack-dev-serve

npm install webpack-dev-serve --save-dev

配置webpack.config.js文件

const webpack = require("webpack");
plugins: [
 new HtmlWebpackPlugin({
 filename: 'index.html',
 template: './index.html',
 }),
 new CleanWebpackPlugin(['dist']), //传入数组,指定要删除的目录
 // 热更新,热更新不是刷新
 new webpack.HotModuleReplacementPlugin()
],
devServer: {//配置此静态文件服务器,可以用来预览打包后项目
 inline:true,//打包后加入一个websocket客户端
 hot:true,//热加载
 contentBase: path.resolve(__dirname, 'dist'),//开发服务运行时的文件根目录
 host: 'localhost',//主机地址
 port: 9090,//端口号
 compress: true//开发服务器是否启动gzip等压缩
},

配置package.json

"scripts": {
 "dev": "webpack-dev-server --mode development"
},

执行npm run dev 访问 http://localhost:9090/ 

浅谈webpack4.x 入门(一篇足矣)

浅谈webpack4.x 入门(一篇足矣)

随便修改任一文件便会自动刷新网站显示修改相应内容。

总结:

webpack4还有很多很多配置,例如css的拆分呀,less sass配置呀,js编译es6呀,多入口配置呀,生产环境配置,js没有使用的模块自动检测剥离等等,只能等下次有空在总结,感谢大家的观看,新手入坑,欢迎指出错误的地方。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery.fn和jQuery.prototype区别介绍
Oct 05 Javascript
兼容最新firefox、chrome和IE的javascript图片预览实现代码
Aug 08 Javascript
jquery实现弹出层效果实例
May 19 Javascript
js实现图片放大和拖拽特效代码分享
Sep 05 Javascript
浅谈JavaScript中的对象及Promise对象的实现
Nov 15 Javascript
jQuery制作全屏宽度固定高度轮播图(实例讲解)
Jul 08 jQuery
微信小程序分页加载的实例代码
Jul 11 Javascript
echarts饼图扇区添加点击事件的实例
Oct 16 Javascript
vue+element-ui集成随机验证码+用户名+密码的form表单验证功能
Aug 05 Javascript
react配置antd按需加载的使用
Feb 11 Javascript
用Golang运行JavaScript的实现示例
Nov 25 Javascript
如何用threejs实现实时多边形折射
May 07 Javascript
vuejs点击class变化的实例
Sep 05 #Javascript
jQuery滑动效果实现方法分析
Sep 05 #jQuery
vue+springboot实现项目的CORS跨域请求
Sep 05 #Javascript
jquery判断滚动条距离顶部的距离方法
Sep 05 #jQuery
jQuery实现基本淡入淡出效果的方法详解
Sep 05 #jQuery
jquery获取元素到屏幕四周可视距离的方法
Sep 05 #jQuery
js jquery 获取某一元素到浏览器顶端的距离实现方法
Sep 05 #jQuery
You might like
把PHP安装为Apache DSO
2006/10/09 PHP
php 仿Comsenz安装效果代码打包提供下载
2010/05/09 PHP
php file_put_contents()功能函数(集成了fopen、fwrite、fclose)
2011/05/24 PHP
php正则匹配文章中的远程图片地址并下载图片至本地
2015/09/29 PHP
thinkPHP+phpexcel实现excel报表输出功能示例
2017/06/06 PHP
PHP设计模式之PHP迭代器模式讲解
2019/03/22 PHP
超清晰的document对象详解
2007/02/27 Javascript
用js实现随机返回数组的一个元素
2007/08/13 Javascript
jQuery.query.js 取参数的两点问题分析
2012/08/06 Javascript
javascript中方便增删改cookie的一个类
2012/10/11 Javascript
js和php如何获取当前url的内容
2013/09/22 Javascript
js 实现菜单上下显示附效果图
2013/11/21 Javascript
ie9 提示'console' 未定义问题的解决方法
2014/03/20 Javascript
javascript十六进制及二进制转化的方法
2015/05/06 Javascript
jquery模拟实现鼠标指针停止运动事件
2016/01/12 Javascript
学习JavaScript设计模式之单例模式
2016/01/19 Javascript
JS 图片压缩原理与实现方法详解
2020/04/29 Javascript
跟老齐学Python之通过Python连接数据库
2014/10/28 Python
简单总结Python中序列与字典的相同和不同之处
2016/01/19 Python
Python中几种导入模块的方式总结
2017/04/27 Python
Python找出最小的K个数实例代码
2018/01/04 Python
Numpy之random函数使用学习
2019/01/29 Python
Python循环中else,break和continue的用法实例详解
2019/07/11 Python
Python操作注册表详细步骤介绍
2020/02/05 Python
Python爬取股票信息,并可视化数据的示例
2020/09/26 Python
python 利用opencv实现图像网络传输
2020/11/12 Python
MIRTA官网:手工包,100%意大利制造
2020/02/11 全球购物
工程专业应届生求职信
2014/02/19 职场文书
《我不是最弱小的》教学反思
2014/02/23 职场文书
婚庆司仪主持词
2014/03/15 职场文书
创建学习型党组织实施方案
2014/03/29 职场文书
2014学校领导四风对照检查材料思想汇报
2014/09/23 职场文书
质量整改报告范文
2014/11/08 职场文书
幼儿教师年度个人总结
2015/02/05 职场文书
Java Optional<Foo>转换成List<Bar>的实例方法
2021/06/20 Java/Android
Feign调用传输文件异常的解决
2021/06/24 Java/Android