Source Map的概念
source map顾名思义,就是代码地图,为什么会有这个东西呢,具体的起源等有时间在追溯,先看看这个东西是怎么用的,有什么用。
提到source map,说的最多的是javascript source map,其实并不仅仅是javascrip程序需要生成source map,其他的代码也需要,比如css(尤其是对于一个大型的前端样式库,比如bootstrap等)。
现代javascript程序越来越复杂,尤其是模块化后,一个javascript程序是由很多文件构,为了让浏览器支持这个复杂的js程序,必须使用开发平台的各种构建工具比如webpack,gulp等等对js程序进行压缩,减少体积;合并,减少HTTP请求的次数;甚至是转换,比如把TypeScript转换成标准的javascript。这样就导致,在浏览器中实际运行的javascript代码跟实际的源程序的脱节,这样给调试程序打来问题,浏览器中的错误提示可能很难定位到具体的程序中。
使用less开发的css文件,合并压缩后,也有类似的问题,这时候就需要source map文件
简单说,Source map就是一个信息文件,里面储存着位置信息。也就是说,转换后的代码的每一个位置,所对应的转换前的位置。
有了它,出错的时候,除错工具将直接显示原始代码,而不是转换后的代码。这无疑给开发者带来了很大方便。
比如构建工具,在生成app.js的同时,生成一个sourcemap文件app.js.map,在app.js文件的末尾添加一行如下的代码
//@ sourceMappingURL=/path/to/app.js.map
如果要使sourcemap文件在调试中起作用,还的浏览器支持,否则也没有用,目前好像只用chrome浏览器支持加载source map文件,chrome的开发者工具,里面的有个设置信息,在工具栏右上角
默认是开启的,这样在调试js的时候就可以看到具体的文件位置了。
下面看看怎么使用构建工具gulp,生成source map文件
一个简单的gulpfile.js文件
// 引入gulp
var gulp = require('gulp');
// 引入gulp-concat插件
var concat = require('gulp-concat');
// 引入gulp-uglify插件
var uglify = require('gulp-uglify');
// 引入gulp-sourcemaps插件
var sourceMap = require('gulp-sourcemaps');
gulp.task('sourcemap',function() {gulp.src('./src/*.js') .pipe( sourceMap.init() ).pipe( concat('all.js') ) .pipe( uglify() ) .pipe( sourceMap.write('../maps/',{addComment: false}) ).pipe( gulp.dest('./dist/') )
})
1)sourceMap.init( ) 启用sourcemaps功能
2)sourceMap.write( ) 生成记录位置信息的sourcemaps文件
经过 concat 和 uglify ,将生成的all.js 与 源文件( src 下的所有js文件 )之间的位置映射信息,生成sourcemaps文件。
sourceMap.write( ),不传参,将会直接在 all.js 尾部,生成sourcemaps信息。
sourceMap.write( path ),将会在指定的 path,生成独立的sourcemaps信息文件。如果指定的是相对路径,是相对于 all.js 的路径。
无法指定路径为 src 目录,否则,sourcemaps文件会生成在 dist 目录下。
addComment : true / false ; 是控制处理后的文件(本例是 all.js ),尾部是否显示关于sourcemaps信息的注释。
不加这个属性,默认是true。设置为false的话,就是不显示。
Source Map的概念相关推荐
- 【转】webpack中关于source map的配置
Webpack中sourcemap的配置 sourcemap是为了解决开发代码与实际运行代码不一致时帮助我们debug到原始开发代码的技术.尤其是如今前端开发中大部分的代码都经过编译,打包等工程化转换 ...
- Source Map的原理探究
摘要: Source Map很神奇,它的原理挺复杂的- 原文:source map 的原理探究 地址:https://www.cnblogs.com/Wayou/p/understanding_fro ...
- Node.js 中 source map 使用问题总结
起源 Node 应用功能越来越复杂,很多业务都开始尝试使用 TypeScript 来开发.现在前端写的 JS 大部分是经过编译过程的,浏览器中通过 source map 的使用,可以很好的解决源码和编 ...
- 记录webpack的source map使用详细说明
common.js export const show = () => {console.log(1212121)();document.write('hello webpack 11') } ...
- Angular 开发中的 Source Map
SourceMaps Demystified (.js.map) 当我们构建 Angular 应用程序时,会创建 js 文件和 .js.map(源映射文件)文件. 从本质上讲,源映射是一个 JSON ...
- 你知道source map如何帮你定位源码么?
大家好,我是若川.今天分享一篇我们经常会忽略的定位原始代码位置原理的文章.文章不长,例子不错,可以先收藏,有空时动手试试. 学习源码系列.年度总结.JS基础系列 前言 我们知道,代码上线前要经过压缩, ...
- Source Map调试压缩后代码
在前端开发过程中,无论是样式还是脚本,运行时的文件可能是压缩后的,那这个时候调试起来就很麻烦. 这个时候,可以使用Source Map文件来优化调试,Source Map是一个信息文件,里面储存着原代 ...
- DevTools failed to load source map: Could not load content for…System error: net::ERR_FILE_NOT_FOUN
DevTools failed to load source map: Could not load content for--System error: net::ERR_FILE_NOT_FOUN ...
- 微信开发者工具 Source Map 的使用
在小程序后台 ->开发管理 ->运维中心 -> 错误日志 中可以看到小程序运行中的报错信息,但是代码都是压缩混淆的,那就需要如何去定位,下面说明说如使用微信开发者工具 Source ...
- 一文看懂 webpack 的所有 source map !
一直以来对source map 都懵懵懂懂, 被webpack 所提供的多样的source 给乱花了眼. 这次就决定来一一尝试一下各种source map的区别 什么是source map 现代的前端 ...
最新文章
- Java项目接口安全_ESAPI安全开发实战
- 模型压缩6倍,无需重训练:数学家团队提出量化新方法
- 实验02 Linux文件和目录管理
- 强大的原生DOM选择器querySelector和querySelectorAll
- c+还是python好-既然C+不如Java、Python,为什么还要学C+?
- VTK:几何对象之ParametricSuperToroid
- LeetCode 138 复制带随机指针的链表-中等
- linux maven安装
- Jsp+Ssm+Mysql实现的进销存管理系统
- 如何使用postman测试服务器的性能,如何用Postman测试API
- cmd52命令发送 mmc_乾坤合一~Linux SD/MMC/SDIO驱动分析
- Pandas处理缺失数据
- Java Se 、JavaEE、JavaME区别
- 锐捷网关交换机开启dhcp服务
- 在线音频剪辑、编辑工具
- MAALA3.9_初等矩阵和等价 (Elementary Matrices and Equivalence)
- [AV1] AV1 帧内预测
- 应用MATLAB建模与仿真
- 【嵌入式基础】用C语言编程、寄存器实现LED流水灯程序;stm32CubeMX+Keil使用HAL库点亮流水灯
- Vuforia-PocketCat丨1. 设计目标及效果展示
热门文章
- java经典算法(一)——zws
- java开发聚合支付系统源码可支撑百万级并发
- linux根据文件内容查找文件名,linux在当前目录下根据文件名查找文件
- 简单的转盘抽奖html,一个很简单的H5的转盘抽奖的(主要用的是css3的属性)
- 戴尔计算机没有硬盘驱动,在Dell计算机上重新安装系统后,如果找不到硬盘驱动器或引导设备该怎么办?...
- 阿里云吴翰清:我对计算的理解
- java outofmemory怎么解决_java.lang.OutOfMemoryError异常解决方法
- 可移动存储的设备格式化 - 文件系统
- python-scrapy模拟登陆网站--登陆青果教务管理系统(二)
- Markdown 制作思维导图