一.sourceMap: 是一个映射关系,如果出错可以知道实际文件行数出错

在webpack.config.js设置属性

devtool: 'source-map'

在生产环境可以设置为(提醒错误比较全面)

devtool: 'cheap-module-eval-source-map'

在线上环境设置为(比较合适)

devtool: 'cheap-module-source-map'

https://segmentfault.com/a/1190000008315937
https://www.html5rocks.com/en/tutorials/developertools/sourcemaps/
http://www.ruanyifeng.com/blog/2013/01/javascript_source_map.html
https://www.youtube.com/watch?v=NkVes0UMe9Y

二.@babel 将ES6自动转为ES5,还可设置自动加载ES6函数

三.Tree Shaking: 根据引用的内容自动选择加载内容 但因为是静态引入方式,所以功能只支持ES module,不支持COMMON JS

线上和线下模式打包引入结果不一样,线下模式会全部引入,但是在线上模式只会引入需要的模块.,就是判断只要引入一个模块,就会采用Tree Shaking方式进行打包

在package.json文件中

"sideEffects": ["@babel/polyfill"],  如果有需要特殊处理的模块,比如会忽略对 @babel/polyfill的处理
"sideEffects": false,   如果没有特殊处理的模块,就可以设为false

在webpack.config.js中

optimization: {
usedExports: true
}

四.Code Spliting

4.1t同步代码:

在配置文件webpack.config.js中

optimization: {
splitChunks: {
chunks: 'all'
}
}

4.2异步代码,会自动进行代码分割

首先安装插件 npm install --save-dev @babel/plugin-syntax-dynamic-import

在 .babelrc 中配置plugins加入

{
"plugins": ["@babel/plugin-syntax-dynamic-import"]
}

4.3 SplitChunksPlugin配置

https://webpack.js.org/plugins/split-chunks-plugin/

五.Bundle Analysis 分析工具

https://webpack.js.org/guides/code-splitting/#bundle-analysis

可视化较强的是webpack-bundle-analyzer

六.懒加载

https://webpack.js.org/guides/code-splitting/#prefetchingpreloading-modules

七.CSS打包 MiniCssExtractPlugin

  CSS合并和压缩: optimize-css-assets-webpack-plugin

PS:因为不支持HMR,所以只在production模式下使用这个CSS打包压缩功能

八.去除一些性能提醒

在webpack.config.js中添加属性

performance: false,

九.浏览器缓存caching

在配置文件output的打包目录的文件命名上加上 [contenthash] , 会根据文件内容进行hash

十.(在plugins中加入配置)自动引入模块 ProvidePlugin (因为在webpack中模块之间是隔离的)这样可以全局引入

new webpack.ProvidePlugin({
$: 'jquery',
// ...
});

十一.将模块js文件中的this指向window

需要先安装imports-loader

在webpack.config.js中加入代码

module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: [
{
loader: "babel-loader",
}, {
loader: "imports-loader?this=>window"
}
]
}
}

十二.全局变量

在package.json文件中  可以设置env全局变量,这样可以直接访问webpack.common.js这一个配置文件中而实现线上和线下模式

    "dev-build": "webpack --config ./build/webpack.common.js",
"dev": "webpack-dev-server --config ./build/webpack.common.js",
"build": "webpack --env.production --config ./build/webpack.common.js"

webpack4一些设置的更多相关文章

  1. webpack4 未设置mode会自动压缩

    最近想用LayaBox做个小游戏,然而Laya本身不自带构建工具.然后觉得写模块化的东西还是用webpack好使,用es6的语法也比较清晰. 于是就装了webpack,只用babel-loader来编 ...

  2. Linux命令总结大全,包含所有linux命令

    使用说明:此文档包含所有的Linux命令,只有你想不到的没有你看不到的,此文档共计10万余字,有8400多行,预计阅读时间差不多需要3个小时左右,所以要给大家说一说如何阅读此文档 为了方便大家阅读,我 ...

  3. Webpack4 的 Tree Shaking:babel-loader设置modules: false,还是设置"sideEffects": false,待确定

    Webpack4 的 Tree Shaking:babel-loader设置modules: false,还是设置"sideEffects": false,待确定 babel-lo ...

  4. webpack4新特性介绍

    导语: webpack是一个JS应用打包器, 它将应用中的各个模块打成一个或者多个bundle文件.借助loaders和plugins,它可以改变.压缩和优化各种各样的文件.它的输入是不同的资源,比如 ...

  5. webpack4.x配置详解,多页面,多入口,多出口,新特性新坑!!

    花了差不多一天多的时间,重新撸了一遍webpack4.x的常用配置. 基本上常用的配置都熟悉了一遍,总体上来讲,为了对parcel进行反击,webpack从4.x开始,正在朝着尽可能的简化配置文件的方 ...

  6. webpack4:连奏中的进化

    webpack4在2月底的时候发布,这次webpack4有了一个名字"Legato",也就是"连奏"的意思,寓意webpack在不断进化,而且是无缝(no-ga ...

  7. React从入门到放弃之前奏(1):webpack4简介

    接触webpack是好久之前的事情了,最近看了下webpack没想到都到4了. webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler). 会创建1个 ...

  8. 带你由浅入深探索webpack4(二)

    在前一篇文章已经介绍了webpack4从入门到一些核心常用的用法,大家可以从上一篇文章看起.带你由浅入深探索webpack4(一) 接着上一章,接下来我们会继续探讨webpack4中的各种实用用法,让 ...

  9. webpack4打包nodejs项目进阶版——多页应用模板

    前段时间我写了个打包nodejs项目的文章,点击前往 但是,问题很多.因为之前的项目是个历史遗留项目,重构起来可能会爆炸,当时又比较急所以就写个的适用范围很小的webpack的打包方法. 最近稍微得空 ...

随机推荐

  1. Java通过SSLEngine与NIO实现HTTPS访问

    Java使用NIO进行HTTPS协议访问的时候,离不开SSLContext和SSLEngine两个类.我们只需要在Connect操作.Connected操作.Read和Write操作中加入SSL相关的 ...

  2. 高效编程:在IntelliJ IDEA中使用VIM

    硬核干货分享,欢迎关注[Java补习课]成长的路上,我们一起前行 ! <高可用系列文章> 已收录在专栏,欢迎关注! 概述 Vim是一个功能强大.高度可定制的文本编辑器; 具体有多强大,我现 ...

  3. SQL 练习20

    查询各科成绩前三名的记录 select a.sid,a.cid,a.score from sc a left join sc b on a.cid = b.cid and a.score<b.s ...

  4. NOIP 模拟 $19\; \rm v$

    题解 一道概率与期望的状压题目 这种最优性的题目,我们一般都是倒着转移,因为它的选择是随机的所以我们无法判断从左还是从右更有,所以我们都搜一遍 时间一定会爆,采用记忆化搜索,一种状态的答案一定是固定的 ...

  5. flutter中修改键盘状态

    当用户进行表格输入时,为更方便的方便用户操作,我们需要设置键盘状态方便用户点击,如当表格填写完成时,用户可以直接点击键盘下面的"完成"状态完成提交. 实现如下: TextFormF ...

  6. C++多态中虚函数表合并与继承问题

    多态: C++的多态是通过一张虚函数表(Virtual Table)来实现的,简称为 V-Table.在这个表中,主要是一个类的虚函数的地址表,这张表解决了继承.覆写的问题,保证其真实反应实际的函数. ...

  7. python下 conda命令手册

    0.说明: 对于tensorflow配合keras使用,因为linux服务器没有root权限,所以目前最高可用版本是  1.6.0,否则就会报错某些 so找不到 conda install -n xu ...

  8. Git使用:

    配置可参考: 配置name 及email:$ git config --global user.name "Your Name"$ git config --global user ...

  9. rtvue-lowcode:一款基于uniapp框架和uview组件库的开源低代码开发平台

    rtvue-lowcode低代码开发平台 rtvue-lowcode一款基于uniapp框架和uview组件库的低代码开发平台,项目提供可视化拖拽编辑器,采用MIT开源协议,适用于app.小程序等项目 ...

  10. ES6 promise的应用

    html部分 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <me ...