webpack4其他配置

49 阅读5分钟

HTML中引入图片

1. 处理效果

image.png   2. 安装

cnpm install --save-dev html-loader

3. 配置config文件

Rules中配置

image.png

文件中引用

image.png

使用sourcemap调试

1. 了解sourcemap

Sourcemap是为了解决实际运行代码(打包后的)出现问题时无法定位到开发环境中的源代码的问题。

image.png

devtool选项

image.png

5个基本类型:

(1) eval

每个模块都使用 eval() 执行,每一个模块后会增加sourceURL来关联模块处理前后的对应关系。如下图

image.png   image.png

由于会映射到转换后的代码,而不是映射到原始代码(没有从 loader 中获取 source map),所以不能正确的显示行数。因为不需要生成模块的sourcemap,因此打包的速度很快。

(2) source-map

source-map会为模块生成独立的soucemap文件。

image.png

打包后的模块在模块后面会对应引用一个.map文件,同时在打包好的目录下会生成相应的.map文件。如下图

image.png

(3) Inline

与source-map不同,增加inline属性后,不会生成独立的.map文件,source map 转换为 DataUrl 后添加到 bundle 中。如下所示:

image.png

(4) cheap

cheap属性在打包后同样会为每一个模块生成.map文件,但是与source-map的区别在于cheap生成的.map文件会忽略原始代码中的列信息,也不包含loader的sourcemap。

(5) module

包含了loader模块之间的sourcemap,将 loader source map 简化为每行一个映射。

2. 使用sourcemap调试

(1)js调试

image.png

(2)css调试

调试css时需要将压缩css的插件注释掉

image.png

Css sourcemap设置

image.png

模块热替换

1. 了解模块热替换

模块热替换(HMR - Hot Module Replacement)功能会在应用程序运行过程中替换、添加或删除模块,而无需重新加载整个页面。主要是通过以下几种方式,来显著加快开发速度:

l 保留在完全重新加载页面时丢失的应用程序状态。

l 只更新变更内容,以节省宝贵的开发时间。

l 调整样式更加快速 - 几乎相当于在浏览器调试器中更改样式。

2. 配置config文件

image.png

Plugin设置

image.png

NamedModulesPlugin:当开启 HMR 的时候使用该插件会显示模块的相对路径

3. 其他配置

如果没运用热替换,检查是否为如下配置,配合style-loader来使用:

image.png

devServer中加入hotOnly表示只有热更新,不会自动刷新页面   image.png

修改js文件时代码不会自动热更新,需加入以下代码可以告诉 webpack 接受更新的模块

image.png

区分开发环境和生产环境

1. 简单了解

开发环境和生产环境的构建目标差异很大。在开发环境中,我们需要具有强大的、具有实时重新加载或热模块替换能力 和 localhost server。而在生产环境中,我们的目标则转向于关注更小的 bundle,以及资源的优化,以改善加载时间。所以我们通常建议为每个环境编写彼此独立的 webpack 配置。

2. 安装

npm install --save-dev webpack-merge

3. 配置

(1) .拆分文件

在这里我们可以将webpack.config.js拆分为三个文件,分别是webpack.common.conf.js、webpack.dev.conf.js和webpack.prod.conf.js。

image.png

webpack.common.conf.js是放一些我们公用的配置,比如入口entry、出口output、常用loader以及插件等。

webpack.dev.conf.js是在开发环境上的配置,比如devServer配置、模块热替换等方便开发的配置

webpack.prod.conf.js是在生产环境上的配置,比如提取分离css、压缩css和js等

webpack.common.conf.js

image.png

引入common配置,merge用来结合公用配置和开发、生产环境配置

Webpack.dev.conf.js

image.png

Webpack.prod.conf.js

image.png

(2) .修改script

修改package.json文件中的script

image.png

--config可以指定使用的配置文件

优化打包速度

1. 减少文件搜索范围

(1)优化resolve.extensions配置

在导入语句没带文件后缀时,Webpack 会自动带上后缀后去尝试询问文件是否存在。

在配置 resolve.extensions 时你需要遵守以下几点,以做到尽可能的优化构建性能:

l 后缀尝试列表要尽可能的小,不要把项目中不可能存在的情况写到后缀尝试列表中。

l 频率出现最高的文件后缀要优先放在最前面,以做到尽快的退出寻找过程。

l 在源码中写导入语句时,要尽可能的带上后缀,从而可以避免寻找过程。例如在你确定的情况下把 require('./data') 写成 require('./data.json') 。

image.png

(2)优化 resolve.modules 配置

resolve.modules 用于配置 Webpack 去哪些目录下寻找第三方模块。

resolve.modules 的默认值是 ['node_modules'],会采用向上递归搜索的方式查找

image.png

image.png

(3)优化resolve.alias配置

resolve.alias 配置项通过别名来把原导入路径映射成一个新的导入路径。

image.png

(4)缩小文件匹配范围

Include:需要处理的文件的位置

Exclude:排除掉不需要处理的文件的位置

image.png

2. 设置noParse

防止 webpack 解析那些任何与给定正则表达式相匹配的文件。忽略的文件中不应该含有 import, require, define 的调用,或任何其他导入机制。忽略大型的 library 可以提高构建性能。比如jquery、elementUI等库

image.png

3. 给babel-loader设置缓存

babel-loader 提供了 cacheDirectory特定选项(默认 false):设置时,给定的目录将用于缓存加载器的结果。

image.png

4. 使用happyPack

HappyPack的基本原理:在webpack构建过程中,我们需要使用Loader对js,css,图片,字体等文件做转换操作,并且转换的文件数据量也是非常大的,且这些转换操作不能并发处理文件,而是需要一个个文件进行处理,HappyPack的基本原理是将这部分任务分解到多个子进程中去并行处理,子进程处理完成后把结果发送到主进程中,从而减少总的构建时间。

(1)安装

cnpm install happypack --save-dev

(2) 配置webpack.common.conf.js文件

引入happypack

image.png

Rules设置

image.png

Plugins设置

image.png

(3)npm run build打包