webpack@4.32.2系列教程【03】- devtool

栏目: 编程工具 · 发布时间: 6年前

内容简介:​ devtool选项用于控制是否需要生成source map,以及如何生成source map。​ source map 一个存储源代码与编译代码对应位置的映射信息文件,它是专门给调试器准备的,它主要用于debug,目前我所知的只有Google Dev Tools 和 Fire Fox Debugger 支持source map。​ Google Dev Tools 可以通过以下方式打开JavaScript的source map 和 CSS的source map:

简介

​ devtool选项用于控制是否需要生成source map,以及如何生成source map。 源码地址

什么是source map?

​ source map 一个存储源代码与编译代码对应位置的映射信息文件,它是专门给调试器准备的,它主要用于debug,目前我所知的只有Google Dev Tools 和 Fire Fox Debugger 支持source map。

​ Google Dev Tools 可以通过以下方式打开JavaScript的source map 和 CSS的source map:

webpack@4.32.2系列教程【03】- devtool

webpack@4.32.2系列教程【03】- devtool

​ source map主要用于将压缩混淆后的JavaScript代码和CSS代码映射到源码中,方便debug调试。更多关于source map的知识,大家可以参考阮一峰大神的文章: JavaScript Source Map 详解

演示

​ 最新的webpack官网中一共有13种devtool可选模式,不同的模式打包输出的代码和source map以及构建的速度都不一样,下面我演示几种比较常用的devtool模式。

eval

​ 表示把每一个模块文件都转换为字符串,并且在每一个模块代码的尾部添加 //# sourceURL=webpack:/// 文件名.js,并使用eval执行。

1、编写入口文件和依赖代码

webpack@4.32.2系列教程【03】- devtool

2、编写webpack配置 & 启动webpack

const webpack = require('webpack');

// 创建编译器对象
const compiler = webpack({
  mode: 'development',
  devtool: 'eval'
});

// 启动webpack
compiler.run((err, stats) => {
  if (err) {
    console.error(err);
    return;
  }
  // 输出编译成功信息
  console.log(stats.toString({ colors: true }));
});

webpack运行结果:

webpack@4.32.2系列教程【03】- devtool

打包输出的main.js文件

webpack@4.32.2系列教程【03】- devtool

​ 从打包出来的main.js文件中我们可以发现index.js文件和role.js文件的所有代码都被转换成了字符串,使用eval进行执行,代码的最后面都加上了//# sourceURL 指向原始文件的位置,这种模式并不会输出map文件。

浏览器运行结果:

webpack@4.32.2系列教程【03】- devtool

webpack@4.32.2系列教程【03】- devtool

​ 从浏览器的运行结果中,左侧多了一个webpack://,其实这个就是//# sourceURL设置值,如果我们在代码中修改了这个名字,那么浏览器就会显示的是另外一个名字,如果删除它,那么它的源码映射就会消失。而且它映射到的每一个源文件的头部都会加上一段webpack的代码,这对于我们来说并不友好,这种模式我使用的频率相当少。

cheap-module-source-map

​ 没有列映射的source map,同时loader的source map也会被简化为每行一个映射,这个配置比较适合在开发环境使用,react脚手架开发模式下也是使用这个配置。

1、安装css-loader

npm i -D css-loader

2、修改webpack配置

webpack@4.32.2系列教程【03】- devtool

3、创建main.css文件

body {
    background-color: greenyellow;
    color: red;
}

4、src/index.js导入main.css

webpack@4.32.2系列教程【03】- devtool

5、运行webpack

webpack@4.32.2系列教程【03】- devtool

webpack@4.32.2系列教程【03】- devtool

source-map

​ source-map 适合在生产环境中使用,它会生成一个源代码对应的.map文件,这个文件描述的打包后的代码和源代码的映射关系。代码上线时不能把这个文件上传到线上服务器,可以把它上传到一个只可以内网访问服务器上,这样只要你是在公司内网环境内就可以很方便的进行线上问题定位。

1、将devtool修改source-map

const webpack = require('webpack');

// 创建编译器对象
const compiler = webpack({
  mode: 'development',
  devtool: 'source-map'
});

// 启动webpack
compiler.run((err, stats) => {
  if (err) {
    console.error(err);
    return;
  }
  // 输出编译成功信息
  console.log(stats.toString({ colors: true }));
});

运行webpack后,可以看到dist文件夹下会多出一个main.js.map文件,这个就是source map源码映射文件

webpack@4.32.2系列教程【03】- devtool

2、将main.js.map文件上传到内网服务器

webpack@4.32.2系列教程【03】- devtool

3、修改sourceMappingURL映射文件的路径

webpack@4.32.2系列教程【03】- devtool

4、在浏览器中运行webpack打包出来的main.js文件

webpack@4.32.2系列教程【03】- devtool

已经成功的跟源码建立了映射,如果此时我把内网的服务器关掉,看看会发生什么事情?

webpack@4.32.2系列教程【03】- devtool

可以发现如果内网服务器关闭了,Google Dev Tools就找不到main.js.map映射文件了,此时浏览器就没有源码映射了,但是也不会报错。

总结

​ 可以使用 SourceMapDevToolPlugin 插件进行更细粒度的配置。通过 source-map-loader 来处理已有的 source map。

​ source-map:在生产环境使用

​ cheap-module-source-map:在开发环境使用

webpack@4.32.2系列教程【03】- devtool

​ 这是官网上所有devtool的配置说明,感兴趣的同学可以对每个选项进行尝试。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

老二非死不可

老二非死不可

方三文 / 机械工业出版社 / 2013-12 / 39.00

关于投资 价值投资者为啥都买茅台? 怎样识别好公司与坏公司? 做空者真的罪大恶极吗? 国际板对A股会有什么影响? 波段操作,止损割肉到底靠不靠谱? IPO真的是A股萎靡不振的罪魁祸首吗? 关于商业 搜狐的再造战略有戏吗? 新浪如何焕发第二春? 百度的敌人为什么是它自己? 我为什么比巴菲特早两年投资比亚迪? 民族品牌这张牌还靠谱......一起来看看 《老二非死不可》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

在线进制转换器
在线进制转换器

各进制数互转换器

SHA 加密
SHA 加密

SHA 加密工具