介绍一下sourcemap
Sourcemap(源代码映射)用于将生产环境中的压缩代码映射回原始的源代码。在前端开发过程中,JavaScript、CSS 和其他文件通常会被压缩和混淆,以减小文件大小和提高网站加载速度。然而,这会让调试和错误定位变得困难,因为生产环境中的代码难以阅读和理解。
(资料图片)
Sourcemap 的作用是在开发和生产环境之间建立一个桥梁,使开发人员能够在浏览器中查看、调试和分析原始代码,而不是压缩后的代码。这对于错误追踪、性能分析和调试非常有帮助。
Sourcemap 通常以一个单独的文件形式存在,它包含了压缩文件和原始文件之间的映射信息。这些映射信息包括每个源代码文件的位置和行列号。浏览器的开发者工具可以读取这些映射文件,从而在调试过程中显示原始的、未压缩的代码。
在开发过程中,许多构建工具(如 Webpack、Rollup 和 Babel)都支持自动生成和处理 sourcemap。只需要在配置文件中启用相关选项,工具会在生成压缩文件的同时生成相应的 sourcemap 文件。
假设你有一个简单的 JavaScript 文件(main.js):
function add(a, b) { return a + b;}function subtract(a, b) { return a - b;}const result = add(10, 20);console.log("Result of add function:", result);const difference = subtract(20, 10);console.log("Result of subtract function:", difference);
在部署到生产环境之前,你可能会使用某个构建工具(如 Webpack 或 UglifyJS)将其压缩和混淆。压缩后的代码可能看起来像这样(main.min.js):
!function(n){var r={};function e(t){if(r[t])return r[t].exports;var o=r[t]={i:t,l:!1,exports:{}};return n[t].call(o.exports,o,o.exports,e),o.l=!0,o.exports}e.m=n,e.c=r,e.d=function(n,r,t){e.o(n,r)||Object.defineProperty(n,r,{enumerable:!0,get:t})},e.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},e.t=function(n,r){if(1&r&&(n=e(n)),8&r)return n;if(4&r&&"object"==typeof n&&n&&n.__esModule)return n;var t=Object.create(null);if(e.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:n}),2&r&&"string"!=typeof n)for(var o in n)e.d(t,o,function(r){return n[r]}.bind(null,o));return t},e.n=function(n){var r=n&&n.__esModule?function(){return n.default}:function(){return n};return e.d(r,"a",r),r},e.o=function(n,r){return Object.prototype.hasOwnProperty.call(n,r)},e.p="",e(e.s=1)}([function(n,r,e){console.log("Result of add function:",e(3)(10,20)),console.log("Result of subtract function:",e(2)(20,10))},function(n,r){n.exports=function(n,r){return n+r}},function(n,r){n.exports=function(n,r){return n-r}},function(n,r,e){"use strict";r.__esModule=!0,r.default=void 0;var t=e(1),o=e.n(t),u=e(2),c=e.n(u);r.default=function(n,r){return"add"===n?o()(r[0],r[1]):"subtract"===n?c()(r[0],r[1]):void 0}}]);
显然,这段代码很难阅读和调试。为了解决这个问题,你可以为该文件生成一个 sourcemap(main.min.js.map)。这个 sourcemap 文件会包含映射信息,使浏览器能够将压缩代码映射回原始代码。
压缩后的文件通常还包含一个注释,指向对应的 sourcemap 文件:
//# sourceMappingURL=main.min.js.map
当浏览器的开发者工具检测到这个注释时,它会自动加载 sourcemap 文件,并在调试时显示原始的未压缩代码。这样,当你在浏览器的开发者工具中设置断点、查看堆栈跟踪或查看日志时,你将看到原始的、易于阅读的代码,而不是压缩后的代码。
例如,在上面的 main.js 文件中,如果你在 `console.log` 语句处设置断点,浏览器将显示原始文件(main.js)及其内容,而不是压缩后的文件(main.min.js)。这使得调试和错误定位变得更加简单和高效。
要生成 sourcemap 文件,你可以在构建工具的配置文件中启用相应选项。以下是一个简单的 Webpack 配置文件示例,用于生成 JavaScript 文件的 sourcemap:
const path = require("path");module.exports = { entry: "./src/main.js", output: { filename: "main.min.js", path: path.resolve(__dirname, "dist") }, devtool: "source-map", // 生成 sourcemap module: { rules: [ { test: /.js$/, exclude: /node_modules/, use: { loader: "babel-loader", options: { presets: ["@babel/preset-env"] } } } ] }};
在这个配置中,devtool: "source-map" 表示生成单独的 sourcemap 文件。Webpack 支持不同类型的 sourcemap,例如 inline-source-map(将 sourcemap 信息嵌入到输出文件中)和 cheap-source-map(生成更快但可能不那么精确的 sourcemap)。具体选项可以根据项目需求和调试需求进行选择。
生成 sourcemap 后,你可以在生产环境中轻松地调试和定位错误。但请注意,sourcemap 文件可能会泄露源代码信息,因此在部署到生产环境时,应确保不将 sourcemap 文件公开暴露。可以通过将 sourcemap 文件仅上传到错误跟踪服务,或在服务器上配置访问权限,以防止未经授权的访问。

介绍一下sourcemap
Sourcemap(源代码映射)用于将生产环境中的压缩代码映射回原始的源代码。在前端开发过程中,JavaScript、CSS和其他文件通常会被压缩和混淆,
2023-04-10
三亚崖州湾科技城携281个岗位赴京招揽海归人才
本报三亚4月9日电(记者黄媛艳)4月8日,由教育部国际司指导、教育部留学服务中心主办的第十九届留学英才招聘会暨国家留学人才就业服务平台(北京
2023-04-10
千万别再用这个姿势睡觉了!冲上热搜的“还阳卧”,小心睡出毛病
最近很多网友都在讨论网红睡姿“还阳卧”。“还阳卧”要求身体自然平躺,双侧的髋关节放松,两脚心贴在一起,腿向两侧外展,尽可能地贴在床上
2023-04-10
完美了!小米寄修服务升级,新增进度可视化功能
近日,小米服务官方微信公众号更新文章,宣布小米商城寄修服务升级,新增了“寄修服务进度可视”功能。小米13徕卡光学镜头第二代骁龙8处理器超
2023-04-10
环球精选!桐梓县新型农村合作医疗特定慢性病门诊医药费报销管理办法 试行_关于桐梓县新型农村合作医疗特定慢性病门诊医药费报销管理办法 试行简述
1、《桐梓县新型农村合作医疗特定慢性病门诊医药费报销管理办法(试行)》是桐梓县合医办于2009年面向全县发布的管理办法,适用对象为患有特定
2023-04-10
精彩绝伦_看热讯
悬疑感一直保持到最后。服化道精美,全员演技在线。影帝和影后演技自然无可挑剔。王一博的大荧幕首秀交出了超级亮眼的答卷。语言天赋极高,现
2023-04-09
意甲29轮后北方三强都未排名前三,1941/42赛季以来首次
意甲29轮后北方三强都未排名前三,1941 42赛季以来首次,三强,意甲,罗马,拉齐奥,科幻片,历史片,战争片,军事条约,尤文图斯队,一九四一(电影)
2023-04-09
求学助成长 圆梦筑未来!南京市职工大学举行“求学圆梦”行动五年成果交流大会
今天(4月9日)上午,来自南京市公安、路桥、制造等传统行业以及互联网+教育、网约车、新能源等新业态的97名职工,以南京市职工大学工商企业管
2023-04-09
菠菜的做法有哪几种_菠菜的做法
1、 菠菜茎叶柔软滑嫩、味美色鲜,含有丰富维生素C、胡萝卜素、蛋白质,以及铁、钙、磷等矿物质。除以鲜菜食用外,还可脱
2023-04-09
两党援乌共识破裂,俄乌冲突将如何左右美国大选?
在俄乌战争第一年的大部分时间里,美国的政治斗争“止于岸边”——这句格言表明,美国两党在外交政策上比在国内政策上更加一致。
2023-04-09X 关闭

X 关闭