当前位置: 首页 > article >正文

webpack生成的SourceMap更改生成路径

文章目录

  • 一、基本概念
  • 二、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.kler.cn/news/364413.html

相关文章:

  • (一)Mysql篇---Mysql整体架构
  • webpack 老项目升级记录:从 node-sass 限制的的 node v8 提升至支持 ^node v22
  • php流程控制
  • 【C++】C++11基础入门
  • java和嵌入式现在哪个好?
  • 取消element-ui中账号和密码登录功能浏览器默认的填充色,element-ui登录账号密码输入框禁用浏览器默认填充色问题
  • Python 打包成 EXE 的方法详解
  • 管理类联考 信息整理和经验分享
  • 洞察数据之美:用可视化探索销售与温度的关系
  • Java中String、StringBuffer和StringBuilder的区别是什么?
  • 【赵渝强老师】Oracle的参数文件与告警日志文件
  • 微信小程序25__实现卡片变换
  • Qt 学习第 天:线程与多线程
  • 4个在线抠图网站,AI一键智能抠图,3秒抠出!
  • 自学C语言——函数(全)
  • 基于单片机的短信火灾报警系统
  • 错误:无法推送一些引用到 ‘https://gitee.com/chek_kk/python-electron-app.git‘
  • RHCSA笔记一
  • 反悔贪心学习笔记[浅谈]
  • 【Axure高保真原型】分级树筛选中继器表格
  • 基于 Python 的机器学习模型部署到 Flask Web 应用:从训练到部署的完整指南
  • 深入计算机语言之C++:类与对象(中)
  • Redis批量获取缓存的方法
  • 【加密系统】华企盾DSC服务台提示:请升级服务器,否则可能导致客户端退回到旧服务器的版本
  • js基础入门篇
  • 【计算机网络 - 基础问题】每日 3 题(五十六)