浅谈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 相关文章推荐
图片onload事件触发问题解决方法
Jul 31 Javascript
js给onclick赋值传参数的两种方法
Nov 25 Javascript
js实现checkbox全选和反选示例
May 01 Javascript
JavaScript中的立即执行函数表达式介绍
Mar 15 Javascript
深入理解JavaScript单体内置对象
Jun 06 Javascript
Bootstrap实现带动画过渡的弹出框
Aug 09 Javascript
浅谈JS之iframe中的窗口
Sep 13 Javascript
微信js-sdk界面操作接口用法示例
Oct 12 Javascript
Three.js开发实现3D地图的实践过程总结
Nov 20 Javascript
快速解决vue在ios端下点击响应延时的问题
Aug 27 Javascript
在Vue项目中使用snapshot测试的具体使用
Apr 16 Javascript
国内常用的js类库大全(CDN公共库)
Jun 24 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脚本数据库功能详解(中)
2006/10/09 PHP
php设计模式之单例、多例设计模式的应用分析
2013/06/30 PHP
session 加入redis的实现代码
2016/07/15 PHP
PHP设计模式之原型模式定义与用法详解
2018/04/03 PHP
jQuery Ajax请求状态管理器打包
2012/05/03 Javascript
javascript通过class来获取元素实现代码
2013/02/20 Javascript
在服务端(Page.Write)调用自定义的JS方法详解
2013/08/09 Javascript
纯js简单日历实现代码
2013/10/05 Javascript
jquery选择器之基本过滤选择器详解
2014/01/27 Javascript
使用text方法获取Html元素文本信息示例
2014/09/01 Javascript
NodeJS Web应用监听sock文件实例
2015/02/18 NodeJs
javascript操作Cookie(设置、读取、删除)方法详解
2015/03/18 Javascript
简单理解js的prototype属性及使用
2016/12/07 Javascript
javascript实现将数字转成千分位的方法小结【5种方式】
2016/12/11 Javascript
很棒的一组js图片轮播特效
2017/01/12 Javascript
Web 开发中Ajax的Session 超时处理方法
2017/01/19 Javascript
浅谈angular.copy() 深拷贝
2017/09/14 Javascript
微信小程序实现动态改变view标签宽度和高度的方法【附demo源码下载】
2017/12/05 Javascript
vue中实现移动端的scroll滚动方法
2018/03/03 Javascript
JS+canvas画布实现炫酷的旋转星空效果示例
2019/02/13 Javascript
Angular实现svg和png图片下载实现
2019/05/05 Javascript
[58:23]LGD vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python简单实现Base64编码和解码的方法
2017/04/29 Python
Python可迭代对象操作示例
2019/05/07 Python
Django框架基础模板标签与filter使用方法详解
2019/07/23 Python
Python基于BeautifulSoup和requests实现的爬虫功能示例
2019/08/02 Python
解决python3 安装不了PIL的问题
2019/08/16 Python
Python imread、newaxis用法详解
2019/11/04 Python
JBL美国官方商店:扬声器、耳机等
2019/12/01 全球购物
为什么要做架构设计
2015/07/08 面试题
文体活动实施方案
2014/03/27 职场文书
老公爱的承诺书
2014/03/31 职场文书
文明社区申报材料
2014/08/21 职场文书
行政上诉状范文
2015/05/23 职场文书
tensorflow中的数据类型dtype用法说明
2021/05/26 Python
Go结合Gin导出Mysql数据到Excel表格
2022/08/05 Golang