zoukankan      html  css  js  c++  java
  • 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主动处理构建报错

  • 相关阅读:
    剑指offer系列0:替换空格&从头到尾打印链表
    算法1:动态规划
    设计模式2:策略模式
    NPOI导出xls、xlsx和csv
    EF6
    oracle导出数据字典
    oracle分组函数
    oracle分析函数中的开窗函数
    Oracle 列转行&行转列
    Oracle基本函数总结
  • 原文地址:https://www.cnblogs.com/chengyunshen/p/12801881.html
Copyright © 2011-2022 走看看