webpack生成的SourceMap更改生成路径

news/2024/10/24 19:07:48/

文章目录

  • 一、基本概念
  • 二、output.sourceMapFilename
  • 三、SourceMapDevToolPlugin


一、基本概念

Source Map 本身是一种文件,它提供了原始文件与编译后的文件之间的映射规则,使得开发者能够调试原始代码,帮助开发人员进行调试和排查。在生成的SourceMap中可以直接定位到源码,原始文件对应的SourceMap地址通常在最后一行。
在这里插入图片描述

//# sourceMappingURL=bundle.js.map
标记了该文件的 Source Map 地址,浏览器才可以正确的找到源代码的位置。webpack 在构建过程中如果devtool不为false,则会自动生成 SourceMap。它会遍历源代码文件,并为每个源文件创建一个单独的 SourceMap 文件。SourceMap 文件的名称通常以 .map 为后缀,并与相应的已编译文件存储在同一目录中
在这里插入图片描述

现在的需求是将所有的SourceMap分离出来,单独存在同一个文件夹中,实现如下:

二、output.sourceMapFilename

在这里插入图片描述

config.output.sourceMapFilename = 'sourcemaps/[base].map'

这里的sourceMapFilename可以自定义路径和名称,但是需要注意,这里的路径只能写相对路径,不能写绝对路径!!

这个名称官方提供的是[file],我写的是[base],这些都是webpack里自带的可以直接使用的模板字符串
在这里插入图片描述
常见的有以下:
在这里插入图片描述
在这里插入图片描述
示例如下:
在这里插入图片描述
关于为什么我使用[base].map,而不是使用[name].js.map,是因为我有一个文件既有css也有js,都有映射,那么直接命名为[name].js.map会产生js和css的冲突,无法生成同名的map文件。

分离成功后,可以看到我的文件里只有map,并且是在当前js同级目录下有sourcemaps文件夹
在这里插入图片描述

但是有个问题是,config.output.sourceMapFilename = 'sourcemaps/[base].map’只能在当前js文件夹下引用,比如我设置config.output.sourceMapFilename ='../sourcemaps/[base].map',虽然可以在../sourcemaps文件夹下生成map文件,但是原js文件的最后一行还是//# sourceMappingURL=sourcemaps/bundle.js.map,并不是//# sourceMappingURL=../sourcemaps/bundle.js.map,也就是在路径引用下无法设置其它目录。

仔细一看:确实sourceMapFilename只设置了map文件的路径,并没有设置sourceMapUrl的路径,它的map文件只会默认定位到当前目录下进行链接。

所以要对sourcemap进行更详细的设置,需要使用SourceMapDevToolPlugin

三、SourceMapDevToolPlugin

该插件是webpack里自带的,不需要额外下载

使用方法如下,注意filenameappend的设置,分别对应了sourcemap生成的文件目录和原js最后一行链接的目录。这里的路径也只能写相对路径,不能写绝对路径

并且config.devtool必须设置为false,因为devtool里配置sourcemap会内部默认调用SourceMapDevToolPlugin插件,如果不设置为false则调用了该插件2次:

const webpack = require('webpack');
config.devtool = false // 必须设置
config.plugins = [new webpack.SourceMapDevToolPlugin({filename: '../../sourcemaps/[file].map',  // 指定 sourcemap 输出到上一级目录的 "sourcemaps/" 文件夹append: '\n//# sourceMappingURL=../../sourcemaps/[file].map',  // 手动指定上一级目录的 source map 引用路径moduleFilenameTemplate: 'webpack:///[resource-path]', // source map 中模块文件的路径})
];

重新执行build后可以看到在原js中可以更改链接目录了,不再是默认的当前路径下了。
在这里插入图片描述
同时我们启动软件看到源码资源也可以看到了,之前如果只设置output.sourceMapFilename并且目录不在原js文件夹下的话,链接资源是无法看到的。
在这里插入图片描述
这样把sourcemap全部分离后,只要不部署该文件夹,那么在生产环境将看不到源码,防止源码被获取。


http://www.ppmy.cn/news/1541643.html

相关文章

基于docker-compose编排部署微服务快速开发框架

1. 规划节点 节点规划,见表1。 表1 节点规划 IP主机名节点10.24.2.10masterdocker-compose节点 2. 基础准备 Docker和Docker Compose已安装完成,将提供的软件包Pig.tar.gz上传至master节点/root目录下并解压。 案例实施 1. 基础环境准备 &#x…

【LeetCode:1160. 拼写单词 + 哈希表】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

记录一次局域网内文件共享

#局域网内文件共享 局域网内文件共享 一.背景介绍 需求:在安全需求背景下,实现局域网内文件访问与修改 (即:禁止wx,qq,云server等传输) 作者的实验条件: win11主机,win10虚拟机 二.实验过程…

linux网桥两个物理网

1、实验目的 将一台Linux主机配置为网桥,将两台在不同网络,ip地址却在同一网段的设备连接起来。 主机 en33 ens37 A 192.168.10.10 - B 192.168.10.11 - Bridge 无地址 无地址 准备3台虚拟机,主机A配置一块网卡,主机B配置一块网卡,主机Bridge配置2块网卡 主机A在vmnet2网…

2024项目管理软件,不融入敏捷开发怎么行?

一、项目管理软件的重要性 在当今快节奏的商业环境中,项目管理软件的重要性愈发凸显。随着市场竞争的不断加剧,企业面临着越来越多的挑战,项目的复杂性和不确定性也在不断增加。在这样的背景下,项目管理软件成为了团队高效规划、…

基于SSM的网上拍卖平台

文未可获取一份本项目的java源码和数据库参考。 1. 选题背景 网络在人们的日常生活所占的比重越来越重,人们对网络信息的依赖性也越来越高。为用户提供良好的网络服务,可以给用户带来便捷的同时,也为网络服务开发商带来了客观的收益。当前&…

HTTP 与 HTTPS 的区别:原理、安全性与应用场景

一、引言 在互联网的世界里,信息的传输离不开协议的支持。HTTP 和 HTTPS 是我们在浏览网页、使用网络应用等场景中经常接触到的协议。随着网络安全意识的不断提高,了解 HTTP 和 HTTPS 的区别对于保障网络通信安全和理解网络应用的运行机制变得至关重要。…

【Linux系统】缺页中断机制

缺页中断是操作系统在访问虚拟内存时的一种机制,主要用于处理页面不在物理内存中的情况。系统处理缺页中断时,通常可以分为以下几种情况: 页面未被加载: 当进程访问的页面不在物理内存中时,会触发缺页中断。操作系统需要找到该页…