webpack4的配置你都掌握了么?
webpack5都出了,webpack4的的基本配置,解析ES6,引入CSS,编译Less,设置image等等,你都会了么?
解析ES6
了解Babel
Babel是一个JavaScript编译器,可以实现将ES6+转换成浏览器能够 识别的代码。
Babel在执行编译时,可以依赖.babelrc文件,当设置依赖文件时, 会从项目的根目录下读取.babelrc的配置项,.babelrc配置文件 主要是对预设(presets)和插件(plugins)进行配置。
其中,presets可以标识需要转换的源码使用了哪些新特性, 可以理解为一系列plugins的集合,例如babel-preset-es2015,可以 将es6转换为es5;而plugins则指示babel如何对代码进行转换, 例如plugin-transform-arrow-functions可将ES6语法转换为 ES5。
解析ES6
1、安装依赖
npm i @babel/core @babel/preset-env babel-loader -D
2、配置webpack.config.js设置loader
module: {
rules: [
{
test: /.js$/,
use: 'babel-loader'
}
]
}
3、根目录创建.babelrc,并配置preset-env对ES6+语法特性进行转换
{
"presets": [
"@babel/preset-env"
]
}
解析React:JSX
1、安装react及@babel/preset-react
npm i react react-dom @babel/preset-react -D
2、配置解析React的presets
{
"presets": [
"@babel/preset-env",
"@babel/preset-react"
]
}
解析CSS和Less
css-loader:用于加载.css文件并转换成commonjs对象。
style-loader:将样式通过style标签插入到head中。
1、安装依赖css-loader和style-loader
npm i style-loader css-loader -D
2、webpack配置项添加loader配置,其中由于loader的执行顺序是从右 向左执行,所以会先进行css的样式解析后执行style标签的插入。
{
test:/.css$/,
use: [
'style-loader',
'css-loader'
]
}
3、less-loader,将less转换成css。安装less-loader依赖并添加webpack配置
{
test:/.less$/,
use: [
'style-loader',
'css-loader',
'less-loader'
]
}
解析图片和字体
file-loader
file-loader:用于处理文件及字体。
按照file-loader依赖并配置
npm i file-loader -D
{
test: /\.(png|svg|jpg|jpeg|gif)$/,
use: 'file-loader'
},
{
test:/\.(woff|woff2|eot|ttf|otf|svg)/,
use:'file-loader'
}
url-loader
url-loader也可以处理文件及字体,对比file-loader的优势就是可以通过设置配置, 设置小资源自动转换为base64。
安装url-loader依赖并配置webpack。
{
test: /\.(png|svg|jpg|jpeg|gif)$/,
use: [
{
loader:'url-loader',
options: {
limit:10240
}
}
]
}
文件监听:watch
通过监听源码的变化,自动构建出新的输出文件。
可通过webpack添加配置或者CLI添加的方式开启监听模式,该方式源码变化时需要每次手动刷新浏览器:
1、webpack配置设置
module.export = {
watch: true
}
2、CLI添加参数:-- watch。
除了通过watch参数的配置方式开启监听,亦可通过定制watch模式选项的形式watchOptions来 定制监听配置。
module.export = {
watch: true,
// 只有开启了监听模式,才有效
watchOptions: {
ignored: /node_modules/, //默认为空,设置不监听的文件或文件夹
aggregateTimeout: 300, // 默认300ms,监听变化后需要等待的执行时间
poll:1000 // 默认1000ms,通过轮询的方式询问系统指定文件是否发生变化
}
}
热更新:webpack-dev-server
热更新基本原理
热更新大概流程:
webpack Compiler,将JavaScript编译成输出的bundle文件。
HMR Server,将热更新的文件输出到HMR Runtime。
Bundle Server,通过提供服务器的形式,提供浏览器对文件的访问。
HMR Runtime,开发打包阶段时,将构建输出文件注入到浏览器,更新文件的变化。
当启动webpack-dev-server阶段时,将源码在文件系统进行编译,通过webpack Compiler编译器 打包,并将编译好的文件提交给Bundle Server服务器;Bundle Server即可以服务器的 方式供浏览器访问。
当监听到源码发生变化时,经过webpack Compiler的编译后提交给 HMR Server,一般通过websocket实现监听源码的变化,并通过json数据的格式通知HMR Runtime,HMR Runtime 对bundle进行改变并刷新浏览器。
热更新配置
相比于watch不能自动刷新浏览器,webpack-dev-server的优势就明显了。webpack-dev-server构建的内容会存放在内存中,所以构建速度更快, 并且可自动的实现浏览器的自动识别并作出变化。其中,webpack-dev-server 需要配合webpack内置的HotModuleReplacementPlugin插件一起使用。
1、安装依赖webpack-dev-server并配置启动项
npm i webpack-dev-server -D
// package.json
"scripts": {
"dev": "webpack-dev-server --open"
}
2、配置webpack,其中webpack-dev-server一般在开发环境中使用,所以需 设置mode模式为development。
const webpack = require('webpack')
plugins: [
new webpack.HotModuleReplacementPlugin()
],
devServer: {
contentBase: path.join(__dirname,'dist'),// 监听dist文件夹下内容
hot: true//启动热更新
}
更多配置项可参考:https://www.webpackjs.com/configuration/dev-server/
文件指纹
hash:整个项目的构建相关,当有文件修改,整个项目构建的hash值就会更新。
chunkhash:和webpack打包的chunk相关,不同的entry会生成不同的chunkhash,一般用于js的打包。
contenthash:根据文件内容来定义hash,文件内容不变,contenthash不变。例如css的打包,由于 修改js或html文件,但是没有修改引入的css样式时,文件不需要生成新的哈希值,所以可适用于css的打包。
备注,文件指纹不能和热更新一起使用。
JS文件指纹设置:chunkhash
webpack.dev.js
module.export = {
entry: {
index: './src/index.js',
search: './src/search.js'
},
output: {
path: path.resolve(__dirname,'dist'),
filename: '[name][chunkhash:8].js'
},
}
CSS文件指纹:contenthash
由于上面方式通过style标签将CSS插入到head中并没有生成单独的CSS文件,我们可以 通过min-css-extract-plugin插件将CSS提取成单独的CSS文件,并添加文件指纹。
1、安装依赖mini-css-extract-plugin
npm i mini-css-extract-plugin -D
2、配置CSS文件指纹
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
module.export = {
module: {
rules: [
{
test:/\.css$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader',
]
},
]
},
plugins: [
new MiniCssExtractPlugin({
filename: '[name][contenthash:8].css'
})
]
}
图片文件指纹设置:hash
其中,hash对应的是文件内容的哈希值,默认为md5生成,不同于前面所说的hash值。
module.export = {
module:{
rules: [
{
test: /\.(png|svg|jpg|jpeg|gif)$/,
use: [{
loader:'file-loader',
options: {
name: 'img/[name][hash:8].[ext]'
}
}],
}
]
}
}
代码压缩
其中js压缩,webpack4.x版本已经内置了uglifyjs-webpack-plugin实现压缩。
CSS 文件压缩:optimize-css-assets-webpack-plugin
1、安装optimize-css-assets-webpack-plugin和预处理器cssnano
npm i optimize-css-assets-webpack-plugin cssnano -D
2、配置webpack
const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin')
module.export = {
plugins: [
new OptimizeCssAssetsPlugin({
assetNameRegExp: /\.css$/g,
cssProcessor: require('cssnano')
})
]
}
html文件压缩:html-webpack-plugin
1、安装html-webpack-plugin插件
npm i html-webpack-plugin -D
2、配置webpack
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.export = {
plugins: [
new HtmlWebpackPlugin({
template: path.join(__dirname,'src/search.html'), // 使用模板
filename: 'search.html', // 打包后的文件名
chunks: ['search'], // 打包后需要使用的chunk(文件)
inject: true, // 默认注入所有静态资源
minify: {
html5:true,
collapsableWhitespace: true,
preserveLineBreaks: false,
minifyCSS: true,
minifyJS: true,
removeComments: false
}
}),
]
}
对应的完整demo代码可查看地址:https://github.com/PCAaron/blogCode/tree/master/webpack/webpack-basic
推荐
后续文章优先更新于GitHub和公众号上,欢迎大家star和关注提前获取最新文章,感谢~
GitHub:https://github.com/PCAaron/PCAaron.github.io
公众号:前端美食汇,亦可直接扫文末二维码直接关注
webpack学习流程
webpack简介
- 构建发展史
基础篇:webpack的基本用法
- webpack的基本用法
- webpack的进阶用法
进阶篇:webpack的构建优化
- 编写可维护的webpack构建配置
- webpack构建速度和体积优化
原理篇:webpack的打包原理
推荐阅读
Babel:https://babeljs.io/docs/en/
webpack-dev-middleware:https://github.com/webpack/webpack-dev-middleware
webpack热更新原理:https://segmentfault.com/a/1190000020310371
webpack4的配置你都掌握了么?的更多相关文章
- webpack4.x配置详解,多页面,多入口,多出口,新特性新坑!!
花了差不多一天多的时间,重新撸了一遍webpack4.x的常用配置. 基本上常用的配置都熟悉了一遍,总体上来讲,为了对parcel进行反击,webpack从4.x开始,正在朝着尽可能的简化配置文件的方 ...
- webpack4入门配置
下面是抄过来的,方便自己翻越 webpack4.x入门配置 1.首先npm install webpack webpack-cli webpack-dev-server -g (mac电脑用超级管 ...
- webpack4基本配置
1.npm init 生成package.json文件 2.npm install webpack webpack-cil --save-dev 安装webpack和webpack-cli ...
- es6 装饰器decorator的使用 +webpack4.0配置
decorator 装饰器 许多面向对象都有decorator(装饰器)函数,比如python中也可以用decorator函数来强化代码,decorator相当于一个高阶函数,接收一个函数,返回一个被 ...
- webpack4 入门配置研究
1. 全局安装 npm install webpack webpack-cli webpack-dev-server -g 1.1)输密文的密码(电脑开机) 1.2)安装成功 2. 输入命令mkdir ...
- webpack4进阶配置
移动端CSS px自动转换成rem 需要两步来实现: px2rem-loader 在构建阶段将px转换成rem lib-flexible 页面渲染时动态计算根元素的font-size值(手机淘宝开源库 ...
- webpack4.x配置详情
webpack打包工具现在非常流行,熟悉并且能够进行配置也变得非常重要.在学习和使用的过程中遇到过很多的问题,希望能够让自己记录下来,巩固自己的学习. 1.创建文件目录 先在自己的常用盘中(我自己的项 ...
- Webpack4 splitChunks配置,代码分离逻辑
博客不知道啥时候写的了,一直在草稿箱没写完,突然感觉今年过去大半了,又没怎么写博客.写写完,有始有终 1.代码分离升级 原来项目代码分离是通过下面的配置,基于bundle-loader插件,通过rou ...
- EXT心得--并非所有的items配置对象都属于EXT的内置类
之前我对EXT的items中未指明xtype的配置对象有一个错误的认识--即虽然某个items未指明它下面的某个组件的xtype,但这个组件肯定属性EXT的某个类.然而今天在查看actioncolum ...
随机推荐
- Intellj IDEA14上用Debug启动项目启动不了:Unable to open debugger port: java.net.SocketException "socket closed"
详情见上图更清晰 15:11:10 Application Server was not connected before run configuration stop, reason: Unable ...
- @COCI 2016/2017 Round 3@ Meksikanac
目录 @description@ @solution@ @accepted code@ @details@ @description@ 在平面直角坐标系中,给定一个左下角为 (0, 0),右上角为 ( ...
- 2015,2016 Open Source Yearbook
https://opensource.com/yearbook/2015 The 2015 Open Source Yearbook is a community-contributed collec ...
- H3C ICMP
- phpstorm 中git 的使用
phpstorm 是一款不可多得的IDE 环境,它既是一款强大的编辑器,还是一款调试器,同时还是一款git 可视化管理工具哟,phpers 值得拥有.今天介绍的是他不为人知的强大功能 —— git. ...
- [转]1.2 java web的发展历史
前言 了解java web的发展历史和相关技术的演进历程,非常有助于加深对java web技术的理解和认识. 阅读目录 1.Servlet的出现 2.Jsp的出现 3.倡导了MVC思想的Servlet ...
- 脑残的设计--- 视图(view)里面包含order by
2015/05/26 更新 今天又遇到了类似问题...尼玛无语了 编码规范啊 !!! 今天有个兄弟跟我说sql跑得太慢了,让我看看.sql如下: SELECT rownum row_num, pv.v ...
- ThinkPHP 模版中的内置标签
内置标签就是模版引擎提供的一组可以完成控制.循环和判断功能的类似HTML语法的标签. 一.判断比较: 1.if标签进行条件判断 //if语句的完整格式 <if condition=&qu ...
- [转]分布式监控工具Ganglia 介绍 与 集群部署.
如果你目的很明确就是冲着标题来的,不爱看我唠叨,请直接进入第二个分割线之后的内容. 其实之前就是有做Swift监控平台的打算的,但是因为没什么硬性需求么,也不要紧的,就一直搁置了.最近实验室来了个大二 ...
- element-ui后台管理系统表单resetFields功能实现
项目中有‘新增’和‘编辑’弹出dialog功能,并且为同一个dialog. html代码: 新增时,这样的样式 编辑时,这样的样式 所以在编辑完关闭dialog后,需要清空表单,一开始简单的使用了el ...