码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Webpack浅记


    为什们要学习Webpack

    • 理解前端“工程化“概念、工具、目标
    • 一个团队总要有那么几个人首席Webpack, 某种程度上可以 成为个人的核心竞争力
    • 高阶前端必经之路

    一、什么是Webpack

    前端项目于由神门构成?---资源

    一个前端项目包括多种资源:PNG、JS、TS、css、Less、Vue...

    在早期我们需要手动去管理这些资源,但开发效率相对现在相差较大,具体体现在:

    • 依赖手工,比如优50多个JS文件进行操作,过程繁琐
    • 当代码文件之间有依赖的时候,就得严格按照以来顺序书写
    • 比较难接入Less、Sass等工具
    • JS、图片、CSS资源管经理模型不一致等等

    基于这些问题,就诞生出里各种各样的工程化工具,某种程度上说,正式这些工具的出现,才有了”前端工程“这一概念

    一些前端工程化工具

    • webpack
    • VIte
    • Gulp
    • rollup.js
    • browserify等

    本质:一种前端资源编译打包工具

    二、使用Webpack---示例

    1. 安装

      npm i -D webpack webpack-cli
      
    2. 编辑配置文件

    3. 执行编译命令

      npx webpack
      

    核心流程(极度简化版)

    1. 入口处理

    从entry文件开始,启动编译流程

    1. 依赖解析

      从enrtry文件开始,更具require或者import等语句找到依赖资源

    2. 资源解析

      根据module配置,调用资源转移器,将png、css等非标准JS资源转译为JS内容

    3. 资源合并打包

      将转移后的资源内容合并打包为可直接在浏览器运行的JS文件

    4. 递归调用2、3,直到所有资源处理完毕

    工作(模块化+一致性)

    1. 多个文件资源合并成为一个,减少http请求书
    2. 支持模块化开发
    3. 支持高级JS特性
    4. 支持TS、CoffeScript方言
    5. 同意图片、css、字体等其他资源的处理模型
    6. Etc...

    核心:配置(流程类和工具类)

    • 流程类:作用于流程中莫格或若干个环节,直接影响打包效果的配置项
    1. 输入:
      • entry
      • context
    2. 模块解析
      • resolve
      • externals
    3. 模块转译
      • module
    4. 后处理
      • optimization
      • mode
      • target

    参考资料

    • Css-loader
    • Webpack 原理系列七:如何编写loader
    • style-loader
    • Bable-loader
    • bable官网
    • @bable/preset-env
    • @bable/preset-react
    • @bable/preset-typescript
    • html-webpack-plugin
    •  

    装用配置项:

    • entry/putput

    • module/plugins

    • mode

    • watch/devServer/devtol

    • 工具类:主流程之外,提供更多工程化能力的配置项

    热更新:HMR

    1. 开启:

      4cb3c338c37a46619a0301e5b9730fde~tplv-k3u1fbpfcp-zoom-1.image

    2. 启动

      npx webpack serve
      
    3. 参考Webpack 原理系列十:HMR 原理全解析

    Tree-Shaking

    功能:对为用到、不可到达、执行结果不会被用到、代码只读不写等类似无用的操作进行处理

    开启:

    1. mode: "production"
    2. optimization.usedExports:true

    PS :对工具类库如Lodash有奇效

    其他工具

    • 缓存
    • Souremap
    • 性能监控
    • 日志
    • 代码压缩
    • 分包
    • ···

    三、进阶篇:理解Loader

    Lodaer:为了处理非标准JS资源,设计初资源翻译模块,用于将资源翻译为标准JS

    特点:

    • 链式调用
    • 支持异步执行
    • 分normal、pitch两种模式

    参考:Webpack 原理系列七:如何编写loader

    四、进阶篇:理解插件

    webpack编译流程 e1a8f191b3e6455cacb055cf40e9df76~tplv-k3u1fbpfcp-zoom-1.image

    理解插件

    钩子的核心信息

    1. 时机:编译过程的特定节点,Webpack会以 钩子形式通知插件此刻正在发生什么事情
    2. 上下文:通过tapable提供的回调机制,以参 数方式传递上下文信息;
    3. 交互:在上下文参数对象中附带了很多存在 side effect 的交互接口,插件可以通过这些接口改变

    参考

    • [源码解读] Webpack 插件架构深度讲解
    • [万字总结] 一文吃透 Webpack 核心原理

    五、相关资料

    • 公众号:Tecvan
    • Awesome Webpack4+ 优秀学习资源
    • 深入浅出webpack
    • Table of Contents
  • 相关阅读:
    「通信原理」格雷码的生成与破译
    VR全景拍摄为什么要加盟?巧借资源实现共赢
    1.6 这些都是小红书里面的名词术语【玩赚小红书】
    Winform +OpenCvSharp更换证件照底色
    linux使用源码安装软件
    这份Java面试八股文堪称2022最强,让329人成功进入大厂
    剑指 Offer 30. 包含min函数的栈
    【大数据】9大实战项目解决你所有烦恼(写论文、找工作)
    【Ubuntu】创建桌面快捷方式并固定到docker栏
    vue-devTools Chrome安装配置
  • 原文地址:https://blog.csdn.net/Flying____fish/article/details/126691152
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号