码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 前端工程化之 Source Map


    目录

    Source Map

    1. 生产环境遇到的问题

    2. 什么是 Source Map

    3. webpack 开发环境下的 Source Map

    3.1 默认 Source Map 的问题

    3.2 解决默认 Source Map 的问题

    4. webpack 生产环境下的 Source Map

    4.1 只定位行数不暴露源码

    4.2 定位行数且暴露源码

    5. Source Map 的最佳实践

    实际开发中需要自己配置 webpack 吗?

    Source Map

    1. 生产环境遇到的问题

    前端项目在投入生产环境之前,都需要对 JavaScript 源代码进行压缩混淆,从而减小文件的体积,提高文件的加载效率。此时就不可避免的产生了另一个问题:

    对压缩混淆之后的代码除错(debug)是一件极其困难的事情

     

     

    • 变量被替换成没有任何语义的名称

    • 空行和注释被剔除

    2. 什么是 Source Map

    Source Map 就是一个信息文件,里面储存着位置信息。也就是说,Source Map 文件中存储着代码压缩混淆

    前后的对应关系。

    有了它,出错的时候,除错工具将直接显示原始代码,而不是转换后的代码,能够极大的方便后期的调试。

    3. webpack 开发环境下的 Source Map

    在开发环境下,webpack 默认启用了 Source Map 功能。当程序运行出错时,可以直接在控制台提示错误行

    的位置,并定位到具体的源代码:

     

     

    3.1 默认 Source Map 的问题

    开发环境下默认生成的 Source Map,记录的是生成后的代码的位置。会导致运行时报错的行数与源代码的行数不一致的问题。示意图如下:

     

     

    3.2 解决默认 Source Map 的问题

    开发环境下,推荐在 webpack.config.js 中添加如下的配置,即可保证运行时报错的行数与源代码的行数保持一致:

    1. module.exports = {
    2.    mode: 'development',
    3.    // eval-source-map 仅限在 "开发模式" 下使用,不建议在 "生产模式" 下使用。
    4.    // 此选项生成的 Source Map 能够保证 "运行时报错的行数" 与 "源代码的行数" 保持一致
    5.    devtool: 'eval-source-map',
    6.    // 省略其他配置项。。
    7. }

    4. webpack 生产环境下的 Source Map

    在生产环境下,如果省略了 devtool 选项,则最终生成的文件中不包含 Source Map。这能够防止原始代码通过 Source Map 的形式暴露给别有所图之人。

     

     

    4.1 只定位行数不暴露源码

    在生产环境下,如果只想定位报错的具体行数,且不想暴露源码。此时可以将 devtool 的值设置为nosources-source-map。实际效果如图所示:

     

     

    4.2 定位行数且暴露源码

    在生产环境下,如果想在定位报错行数的同时,展示具体报错的源码。此时可以将 devtool 的值设置为source-map。实际效果如图所示:

     

     

    采用此选项后:你应该将你的服务器配置为,不允许普通用户访问 source map 文件!

    5. Source Map 的最佳实践

    ① 开发环境下:

    • 建议把 devtool 的值设置为 eval-source-map

    • 好处:可以精准定位到具体的错误行

    ② 生产环境下:

    • 建议关闭 Source Map 或将 devtool 的值设置为 nosources-source-map

    • 好处:防止源码泄露,提高网站的安全性

    以上教程与图片来源《哔哩哔哩黑马程序员》

    实际开发中需要自己配置 webpack 吗?

    答案:不需要!

    • 实际开发中会使命令行工具(俗称 CLI)一键生成带有 webpack 的项目

    • 开箱即用,所有 webpack 配置项都是现成的!

    • 我们只需要知道 webpack 中的基本概念即可!

  • 相关阅读:
    spring boot 3 + spring cloud sleuth 无法注入Tracer问题
    【MIT6.824】lab2C-persistence, lab2D-log compaction 实现笔记
    系统架构7个非功能性需求
    day076:枚举
    安装CDH配置本地CM、CDH源时,配置Apache Web服务器一直显示403看不到目录
    鲜花销售管理系统,鲜花商城管理系统,鲜花网站毕业设计
    vue beforeEach 路由拦截 cookie 登录管理 jsonwebtoken 表单提交校验 sessionStorage localStorage
    产品工作流| 需求分析
    用于大规模 MIMO 检测的近似消息传递 (AMP)(Matlab代码实现)
    iMeta框架使用方法
  • 原文地址:https://blog.csdn.net/qq_61950936/article/details/126304748
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号