webpack 热更新原理

webpack Compile: 将js编译成Bundle

HMR Server: 将热更新的文件输出给 HMR Runtime

Bundle Server: 提供文件在浏览器访问

HMR Runtime:会被注入到浏览器,更新文件变化

bundle.js : 构建输出的文件

资源内联

代码层面:

页面框架的初始化脚本
上报相关打点
css内联避免页面闪动
请求层面:
减少http网络请求数 (小图片或者字体内联(url-loader))

html和 js内联
`
raw-loader 内联html

raw-loader 内联js

`

多页面打包通用方案

1.动态获取 entry 和设置 html-webpack-plugin数量

2.利用 glob.sync

  entry: glob.sync(path.join(__dirname,'./src/*/index.js'))

使用source map

1.五个关键字

eval: 使用eval包裹代码块
source map: 产生.map文件
cheap : 不包含列信息
inline 将.map作为DataURI嵌入,不单独生成 .map文件
module : 包含loader的sourcemap

webpack ssr打包存在的问题

1.浏览器的全局变量(nodejs中没有 document window)
组件适配: 将不兼容的组件根据打包环境进行适配。
请求适配: 将fetch或者 ajax发送请求的写法改成 isomorphic-fetch或者 axios。
2.样式问题(nodejs无法解析css)
方案一: 服务端打包通过ignore-loader忽略掉css的解析
方案二: 将style-loader 替换成 isomorphic-style-loader。

优化构建时命令行的显示日志

|preset|alternative|description|
|"errors-only"|none|只在发生错误时输出|
|"minimal"|none|只在发生错误或有新的编译时输出|
|"none"|false|没有输出|
|"normal"|true|标准输出|
|"verbose"|none|全部输出|

如何优化?
1.插件 friendly-errors-webpack-plugin:

success: 构建成功的日志提示
warning:构建警告的日志提示
error : 构建报错的日志提示
2.stats设置成 errors-only

如何判断构建是否成功?

在CI/CD的 pipline 或者发布系统需要知道当前的构建状态。

每次构建完成后输入 echo $? 获取错误码

webpack4 之前的版本构建失败不会抛出错误码
nodejs中的 process.exit规范:

0表示成功完成,回调函数中err为null。
非0表示执行失败,回调函数中,err不为null, err.code就是传给exit的数字。

如何主动捕获并处理构建错误?

compiler 在每次构建结束后会触发done这个hook
process.exit主动处理构建报错

原文地址:https://www.cnblogs.com/chengyunshen/p/12801881.html