您的位置:

Sourcemap全解:什么是sourcemap?怎么用?

一、Sourcemap还原项目

在前端开发中,有时候我们会发现自己写的代码在调试时看不懂,因为代码文件被压缩成了一行或者几行,难以阅读和查错。此时,我们可以使用sourcemap文件还原源代码,从而更便于我们的调试。

一般情况下,我们可以通过在webpack或者gulp等自动化构建工具中开启sourcemap选项生成sourcemap文件。当我们在调试模式下使用Chrome或者Firefox浏览器调试代码时,我们可以通过在Sources或者Debugger面板中选择对应的sourcemap文件来还原代码。

二、Sourcemap是干嘛的

sourcemap文件是一种映射关系文件,它存储了压缩后的代码与源代码之间的关系,包括代码位置、代码映射位置和所在文件名等信息。浏览器调试工具通过sourcemap文件可以将压缩后的代码还原成原始代码,并且可以显示正确的行号和源文件名,便于开发者进行调试和排错。

三、Sourcemap原理

sourcemap文件原理就是通过将源代码与压缩后的代码之间的关系信息存储在一个.json文件中。当浏览器遇到错误信息时,可以通过读取对应的sourcemap文件,查找错误发生在哪一段源代码中,从而帮助开发人员更快地定位问题。

四、Sourcemap怎么读

假设我们使用了webpack打包工具自动生成了sourcemap文件,那么我们可以通过以下步骤读取sourcemap文件:

1. 在我们使用webpack打包工具时,需要开启sourcemap选项,生成sourcemap文件;
2. 首先在控制台打印出错误信息,然后在浏览器调试工具中打开Sources或Debugger面板;
3. 在 Sources 或者 Debugger 面板中可以看到当前页面加载的所有资源,我们可以通过定位到错误信息所在的文件位置,选择对应的sourcemap文件并加载;
4. 当我们将 sourcemap 文件引入到浏览器后,浏览器会自动将其与压缩后的文件关联,并且会重新映射代码到对应的源代码和行数;
5. 最后,我们可以在浏览器中查看到正确的源代码行数和文件,在指定行数处进行调试和排错。

五、Sourcemap怎么设置

我们可以通过webpack、gulp等构建工具来开启sourcemap选项生成sourcemap文件。在webpack中,开启sourcemap选项可以使用以下命令:

module.exports = {
  devtool: 'source-map'
}

在gulp中,可以使用以下包来生成sourcemap:

var sourcemaps = require('gulp-sourcemaps');
var uglify = require('gulp-uglify');

gulp.task('js', function () {
  return gulp.src('./src/js/*.js')
    .pipe(sourcemaps.init())
    //压缩、混淆文件
    .pipe(uglify())
    .pipe(sourcemaps.write())
    .pipe(gulp.dest('./dest/js/'))
})

六、Sourcemap什么意思

sourcemap的字面意思是“源码映射”,它是一种映射关系文件,用于将压缩后的代码还原成源代码,并且能够正确地显示出源代码的行数、列数、文件名等信息,便于开发人员进行调试和排错。

七、Sourcemap堆栈解析

当我们的代码发生错误时,浏览器会显示出一个调用堆栈信息,这个堆栈信息是由一系列错误发生的位置构成,称为堆栈帧。其中每个堆栈帧都包含了一个代码位置信息,包括文件名、行数和列数等信息。浏览器可以通过sourcemap文件将这些错误的位置信息重新映射到与之对应的源代码中,帮助我们进行排错。

八、Sourcemap定位问题

在使用sourcemap定位问题时,我们可以通过以下步骤来进行:

1. 打开浏览器调试工具,使用 Sources 或 Debugger 面板找到面板底部的 Call Stack 面板,展开以查看错误信息的位置;
2. 右键单击错误堆栈的某个帧,并选择 "Open in Source" 选项,浏览器就会加载错位代码文件和 sourcemap 文件;
3. 接着,就可以像调试普通 JavaScript 代码一样查找并解决问题代码了。

九、Sourcemap文件泄露怎么整改

因为sourcemap文件包含了源代码的位置信息,若遭窃取或者泄露,可能会引发严重的安全问题。为了解决这个问题,我们可以通过以下方式进行整改:

1. 不在生产环境中生成sourcemap文件;
2. 对sourcemap文件进行加密、混淆或者删除;
3. 使用防盗链策略,限制只有网站绑定的域名或者IP地址才可以访问sourcemap文件;
4. 修改代码中的提示文本,避免泄露敏感信息。

麻省理工sourcemap

麻省理工大学开发了一款sourcemap可视化工具,可以便于我们快速地查找并定位sourcemap文件和源代码文件,从而更方便地进行调试和排错。下面是使用sourcemap可视化工具的相关代码:

var sourceMap = require('source-map');
var fs = require('fs');

var rawSourceMap = fs.readFileSync('bundle.js.map');
var consumer = await new sourceMap.SourceMapConsumer(rawSourceMap.toString());

// 查找帧所在的位置
var location = consumer.originalPositionFor({
  line: 1,
  column: 12128
});

console.log(location.source); // "index.js"
console.log(location.line); // 7
console.log(location.column); // 5

总之,sourcemap是前端开发中非常重要的一项工具,通过合理使用sourcemap可以提高我们在开发过程中的调试效率和代码质量,是每个前端开发人员必须掌握的技能之一。