用 source map 调试生产环境

article/2025/8/29 9:06:38

当我们的应用程序部署到生产环境时,我们发现它与我们在开发环境时的代码不同。我们的代码在构建过程中会以各种方式进行修改和优化。

TypeScript 被转译、压缩。生成的 JavaScript 包尽可能小并且能够在浏览器中正常运行。

所有这些步骤都很有效率,它们提高了我们应用程序在生产环境下的性能。但是当我们需要在生产环境下调试代码时它对我们产生了很大的障碍。

但是有一个解决方案:Source Map

配合Chrome 开发工具可以为我们提供一个debug线上项目的功能

Source Map简介:

从技术上讲,source maps只是一个包含以下字段的 JSON 文件:

  • version:    表示source map版本
  • file:    source map所属的转译后文件的名称
  • sourceRoot:     basePath — 源相对于这里
  • sources:    原始源文件的路径(例如 TypeScript 文件)
  • sourcesContent:    可选属性,可以包含整个源代码。
  • names:    在代码中找到的方法或变量名称
  • mappings:    这是整个功能起作用的关键。从技术上讲, mappings 属性是一个非常大的字符串,其中包含 Base64 VLQ(可变长度数量)值。这些值有助于找到源文件中的原始位置。

项目环境

使用 @angular/cli 12.0.3 所搭建的标准 Angular 项目

{"name": "sourcemap","version": "0.0.0","scripts": {"ng": "ng","start": "ng serve","build": "ng build","watch": "ng build --watch --configuration development","test": "ng test"},"private": true,"dependencies": {"@angular/animations": "~12.0.3","@angular/common": "~12.0.3","@angular/compiler": "~12.0.3","@angular/core": "~12.0.3","@angular/forms": "~12.0.3","@angular/platform-browser": "~12.0.3","@angular/platform-browser-dynamic": "~12.0.3","@angular/router": "~12.0.3","rxjs": "~6.6.0","tslib": "^2.1.0","zone.js": "~0.11.4"},"devDependencies": {"@angular-devkit/build-angular": "~12.0.3","@angular/cli": "~12.0.3","@angular/compiler-cli": "~12.0.3","@types/jasmine": "~3.6.0","@types/node": "^12.11.1","jasmine-core": "~3.7.0","karma": "~6.3.0","karma-chrome-launcher": "~3.1.0","karma-coverage": "~2.0.3","karma-jasmine": "~4.0.0","karma-jasmine-html-reporter": "^1.5.0","typescript": "~4.2.3"}
}

debug步骤:

使用Source Map进行调试还需要一些步骤,一般情况下项目的 source maps文件是不会在生产环境下被生成的,以防止源代码泄露。

angular.json 文件包含一个sourceMap属性,允许我们指定是否要在生产构建中使用它

"architect": {"build": {…"configurations": {"production": {…"sourceMap": true}},"defaultConfiguration": "production"}}

或者添加下列命令行进行覆盖 (Angular 7.2版本以下的项目需要使用命令行方式)

--source-map=true

现在如我们所见,在build执行完后,dist中出现了js.map文件

注意:确保你要调试的本地代码与线上代码相同

现在我们可以使用 Chrome 开发工具从本地文件系统上传js.map。

打开开发工具并右键单击。找到需要调试的js以及与其相对的 js.map文件,记录路径。现在输入js.map文件路径。

注意:必须通过以下方式添加路径: file:///pathToFile

我们也可以使用浏览器打开js.map,这样浏览器上方的地址栏就自动生成了我们需要的path

 

如果左侧出现了webpack://,则表示source map已经成功导入,可以调试对应的源码 


http://chatgpt.dhexx.cn/article/hgI8BuTn.shtml

相关文章

uniapp 小程序 开发环境和生产环境

uni开发小程序 运行到开发工具 再上传 process.env.NODE_ENV 获取的值是development 一直是开发环境 用uni发行 上传到微信公众平台是生成环境 在 HBuilderX 中,点击“运行”编译出来的代码是开发环境,点击“发行”编译出来的代码是生产环境 let url;if …

Vue cli3配置生产环境,开发环境,和测试环境

目录1、先在package.json文件中添加: 2、在项目目录下建立 .env文件和.env.test文件 3、配置api变量 3.1、配置axios的baseURL路径 3.2、自己拼接的路径 4、.env知识点补充 4.1,关于文件名:必须以如下方式命名,不要…

31 SpringBoot多环境的切换(生产环境、开发环境、测试环境)

参考链接: Spring官网 Spring官网 外部配置加载顺序的说明 SpringBoot多环境的切换(生产环境、开发环境、测试环境)_周太阳的博客-CSDN博客_springboot测试生产环境切换 java maven 测试生产环境配置_SpringBoot生产环境和测试环境配置分离的教程详解_落云歌语文…

生产环境关闭 swagger

#生产环境需要关闭 swagger 防止接口暴露 1,启动判断写在相应的环境配置文件中,根据条件判断是否启动 swagger : 添加配置项:swagger.is.enable #是否激活 swagger true or false swagger.is.enabletrue2,代码取值&a…

前端工程师生产环境 debugger 技巧

关注公众号 前端开发博客,领27本电子书 回复加群,自助秒进前端群 导言 开发环境 debug 是每个程序员上岗的必备技能。生产环境呢?虽然生产环境 debug 是一件非常不优雅的行为,但是由于种种原因,我们又不得不这么干。 那…

【微信小程序 | 实战开发】开发环境、测试环境和生产环境

写在前面: 你是否想要掌握人工智能的最新技术和应用?你是否想要成为未来社会的创新者和领导者?你是否想要和全球的优秀导师和同学一起学习和交流?如果你的答案是肯定的,那么欢迎来到床长人工智能教程网站,这…

Nginx生产环境平滑升级

一.背景 最近遇到一个比较尴尬而又实际的问题,那就是我们生产环境使用的Nginx是Centos6的老古董。业务需求需要加载Nginx的一个模块来实现,但是版本太老了,需要Nginx1.18之后才能支持,而我们的是Nginx1.12。 那升级Nginx是我们要做…

生产环境和开发环境_环境部署:开发、测试和线上环境的区别

点击蓝字 关注我们 软件开发环境(Software Development Environment,SDE)是指在基本硬件和宿主软件的基础上,为支持系统软件和应用软件的工程化开发和维护而使用的一组软件,简称SDE。它由软件工具和环境集成机制构成,前者用以支持软件开发的相关过程、活动和任务,后者…

python生产环境部署

文章目录 一、前言二、准备工作三、安装python四、安装虚拟环境 一、前言 在实际工作中,很多公司的生产环境都是隔离外网的,而且往往多个项目组共用相同的服务器,因此经常会遇到两个问题: python以及第三方模块的版本难以统一&a…

django生产环境部署

django生产环境部署 生产环境中的数据流 参考文档: wsgi详解:https://blog.csdn.net/li_101357/article/details/52748323 wsgi协议介绍(萌新版):https://blog.csdn.net/j163you/article/details/80919360 廖雪峰…

开发环境、测试环境、生产环境 到底是什么?

读一些官方文档的时候,总会遇到以下几个关键的名词,一开始我不太懂,绕来绕去,让我对文档阅读产生了误会,于是查找了一些资料。 百度解释如下: 开发环境:开发环境是程序猿们专门用于开发的服务器…

生产环境和开发环境

开发环境(development) 开发环境: 是指程序猿专门用于开发的服务器,配置比较简单随意,主要是为了开发过程中调试方便,一般打开全部错误报告和测试工具。 生产环境:(production&…

postman接口自动化测试

Postman除了前面介绍的一些功能,还有其他一些小功能在日常接口测试或许用得上。今天,我们就来盘点一下,如下所示: 1.数据驱动     想要批量执行接口用例,我们一般会将对应的接口用例放在同一个Collection中&#xf…

接口自动化测试:Postman实战教程

01 接口测试 (1)服务器端(server):在使用别人的服务器上,例如微信APP客户端,服务端在腾讯的服务端上,微信上的账号信息,聊天记录均存储在服务端上;用户A发送…

APITest接口自动化测试平台

接口自动化测试平台 环境 JAVA 1.8 MYSQL 测试管理平台为 war(SpringSpringMVCMaven) 定时执行为 jar(SpringMaven) ps:该项目测试管理平台(包括用例调试)与定时执行是分开的,可分开…

全网最全,接口自动化测试怎么做的?精通接口自动化测试详解

目录:导读 一、前言二、接口自动化测试的 "能 "1、接口自动化的目标2、接口自动化 Case 用例设计原则3、接口自动化用例定时跑 三、接口自动化测试的 "不能 "1、接口自动化之难点2、接口自动化之痛点 一、前言 接口通俗来讲就是前端和后段之间…

接口自动化测试框架搭建

一、原理及特点 参数放在XML文件中进行管理用httpClient简单封装一个httpUtils工具类测试用例管理使用了testNg管理,使用了TestNG参数化测试,通过xml文件来执行case。测试报告这里用到第三方的包ReportNG 项目组织用Maven 二、准备 使用工具&#xff1…

接口自动化测试实践指导(下):接口自动化测试断言设置思路

在前篇文章: 接口自动化测试实践指导(中):接口测试场景有哪些 中详细给小伙伴们讲解了一下接口自动化需要做哪些准备工作及接口测试场景有哪些。 本篇文章是最后一篇,主要分享一下接口自动化测试断言设置思路。 如…

Apifox接口自动化测试方法

1.新建测试用例 2.输入名称、分组、优先级后点击确定 3.点击测试用例名称或者详情 4.添加步骤,两个方式都可以 5.选择要测试的接口后选择模式,复制/绑定,复制-复制一份数据,和原来的接口相互独立,互不影响&…

接口自动化测试,完整入门篇

1. 什么是接口测试 顾名思义,接口测试是对系统或组件之间的接口进行测试,主要是校验数据的交换,传递和控制管理过程,以及相互逻辑依赖关系。其中接口协议分为HTTP,WebService,Dubbo,Thrift,Socket等类型,测试类型又主…