Angular 入门教程系列:41:使用source-map-explorer对构建结果进行分析
发布日期:2021-06-30 20:13:18 浏览次数:2 分类:技术文章

本文共 4976 字,大约阅读时间需要 16 分钟。

在前面一篇文章中介绍了使用webpack-bundle-analyzer对构建结果大小进行分析的方法,这篇文章来介绍另外一种工具:source-map-explorer的使用方式。

概要介绍

source-map-explorer是通过对source map文件进行确认之后得出各个组件的分析结果的。而这些source map文件在Angular中则体现为后缀为.map的文件,而这些文件就是source map的文件。

  • 为什么会有source map文件呢?

以Angular为例,我们在Angular中已经不再是使用原生的JavaScript,而是使用typescript,而我们所写的的这些后缀为.ts的typescript代码作为前端应用运行起来的时候则需要经过编译的过程,而编译则是将这些代码转换为JavaScript代码。而当问题出现的时候,为了定位则需要了解这些转换后的代码和Angular的代码之间的关联映射关系,而这正是source map的作用。

除此之外,随着前端框架的蓬勃发展,在使用的过程中,JavaScript代码的压缩、合并与转换操作也越来越常见,所以作用于定位的source map也非常之重要。

source-map-explorer

  • URL链接:https://github.com/danvk/source-map-explorer

使用方法

步骤1: 安装source-map-explorer

安装方法:npm install -g source-map-explorer

步骤2: 构建打包并生成sourcemap文件

以下对ng-alain的demo应用进行结果分析,使用ng-alain的方法可参看:

  • https://liumiaocn.blog.csdn.net/article/details/102508783

使用如下命令对上述应用进行打包并生成结果的json文件

执行命令:ng build --prod --source-map

执行日志如下所示

liumiaocn:alain-demo liumiao$ ng build --prod --source-map92% chunk asset optimization TerserPlugin<--- Last few GCs --->...省略FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory ...省略Abort trap: 6liumiaocn:alain-demo liumiao$

问题与对应方法

可以看到上述结果中出现了FATAL ERROR:

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory

原因是因为堆空间不足, 使用如下命令在npm中设定max_old_space_size即可

对应方法:npm run color-less && node --max_old_space_size=5120 ./node_modules/@angular/cli/bin/ng build --prod --source-map

执行日志如下所示:

liumiaocn:alain-demo liumiao$ npm run color-less && node --max_old_space_size=5120 ./node_modules/@angular/cli/bin/ng build --prod --source-map> alain-demo@0.0.0 color-less /Users/liumiao/alain-demo> node scripts/color-less.js? Theme generated successfully. OutputFile: /Users/liumiao/alain-demo/src/assets/alain-default.lessTheme generated successfullyGenerating ES5 bundles for differential loading...ES5 bundle generation complete.chunk {0} runtime-es2015.3bbf450ebabafdcfd0b8.js, runtime-es2015.3bbf450ebabafdcfd0b8.js.map (runtime) 2.32 kB [entry] [rendered]chunk {0} runtime-es5.3bbf450ebabafdcfd0b8.js, runtime-es5.3bbf450ebabafdcfd0b8.js.map (runtime) 2.26 kB [entry] [rendered]chunk {2} polyfills-es2015.34c1a0caedadd28b3680.js, polyfills-es2015.34c1a0caedadd28b3680.js.map (polyfills) 36.5 kB [initial] [rendered]chunk {5} 5-es2015.4d947d6ee420fb167b65.js, 5-es2015.4d947d6ee420fb167b65.js.map () 11.7 kB  [rendered]chunk {5} 5-es5.4d947d6ee420fb167b65.js, 5-es5.4d947d6ee420fb167b65.js.map () 11.7 kB  [rendered]chunk {6} 6-es2015.708bea98660cf0bdf3fd.js, 6-es2015.708bea98660cf0bdf3fd.js.map () 113 kB  [rendered]chunk {6} 6-es5.708bea98660cf0bdf3fd.js, 6-es5.708bea98660cf0bdf3fd.js.map () 113 kB  [rendered]chunk {3} polyfills-es5.da4d0bf97e8123004df6.js, polyfills-es5.da4d0bf97e8123004df6.js.map (polyfills-es5) 122 kB [initial] [rendered]chunk {1} main-es2015.ad8342eee00c48d310f4.js, main-es2015.ad8342eee00c48d310f4.js.map (main) 1.69 MB [initial] [rendered]chunk {1} main-es5.ad8342eee00c48d310f4.js, main-es5.ad8342eee00c48d310f4.js.map (main) 1.85 MB [initial] [rendered]chunk {4} styles.f4bc93f25260a03907f9.css, styles.f4bc93f25260a03907f9.css.map (styles) 549 kB [initial] [rendered]chunk {scripts} scripts.954dac1e94a9b5d3eaad.js, scripts.954dac1e94a9b5d3eaad.js.map (scripts) 1.13 MB [entry] [rendered]Date: 2019-10-11T20:16:36.820Z - Hash: d03446ba0ef36f47e208 - Time: 200344msliumiaocn:alain-demo liumiao$

而生成的结果如下所示,有map文件和js文件

liumiaocn:alain-demo liumiao$ ls dist/alain-demo/3rdpartylicenses.txt                         favicon.ico                                  runtime-es2015.3bbf450ebabafdcfd0b8.js5-es2015.4d947d6ee420fb167b65.js             index.html                                   runtime-es2015.3bbf450ebabafdcfd0b8.js.map5-es2015.4d947d6ee420fb167b65.js.map         main-es2015.ad8342eee00c48d310f4.js          runtime-es5.3bbf450ebabafdcfd0b8.js5-es5.4d947d6ee420fb167b65.js                main-es2015.ad8342eee00c48d310f4.js.map      runtime-es5.3bbf450ebabafdcfd0b8.js.map5-es5.4d947d6ee420fb167b65.js.map            main-es5.ad8342eee00c48d310f4.js             scripts.954dac1e94a9b5d3eaad.js6-es2015.708bea98660cf0bdf3fd.js             main-es5.ad8342eee00c48d310f4.js.map         scripts.954dac1e94a9b5d3eaad.js.map6-es2015.708bea98660cf0bdf3fd.js.map         polyfills-es2015.34c1a0caedadd28b3680.js     styles.f4bc93f25260a03907f9.css6-es5.708bea98660cf0bdf3fd.js                polyfills-es2015.34c1a0caedadd28b3680.js.map styles.f4bc93f25260a03907f9.css.map6-es5.708bea98660cf0bdf3fd.js.map            polyfills-es5.da4d0bf97e8123004df6.jsassets                                       polyfills-es5.da4d0bf97e8123004df6.js.mapliumiaocn:alain-demo liumiao$

步骤3: 确认结果

以生成的main*的js文件为例,进行分析,使用命令和结果如下所示:

命令:source-map-explorer 文件名称

正常的情况下,会将生成的html文件自动打开浏览器进行显示,执行日志信息如下所示:

liumiaocn:alain-demo liumiao$ source-map-explorer main-es2015.ad8342eee00c48d310f4.jsmain-es2015.ad8342eee00c48d310f4.js  Unable to map 140/1773942 bytes (0.01%)liumiaocn:alain-demo liumiao$

本例的结果显示如下图所示:

在这里插入图片描述

转载地址:https://liumiaocn.blog.csdn.net/article/details/102511013 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:开发工具系列:VSCODE使用与技巧(1)
下一篇:Angular 入门教程系列:40:使用webpack-bundle-analyzer对构建结果进行分析

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年05月01日 16时46分37秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章