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

编写webpack插件自动上传sourceMap

一个简化的Webpack插件示例,用于自动上传sourceMap文件到服务器
这个插件会在每次编译后寻找sourceMap文件,并将其上传到指定的服务器。这个例子假设服务器支持HTTPS,并且上传是通过POST请求实现的。根据实际情况,可能需要调整上传逻辑。

const fs = require('fs');
const path = require('path');
const https = require('https');
 
class AutoUploadSourceMapPlugin {
  constructor(options) {
    this.options = options;
  }
 
  apply(compiler) {
    compiler.hooks.afterEmit.tapAsync('AutoUploadSourceMapPlugin', (compilation, callback) => {
      const assetNames = Object.keys(compilation.assets);
      const sourceMapAssetName = assetNames.find((name) => /\.map$/.test(name));
 
      if (!sourceMapAssetName) {
        callback();
        return;
      }
 
      const sourceMapPath = path.join(compilation.options.output.path, sourceMapAssetName);
      const sourceMapContent = fs.readFileSync(sourceMapPath, 'utf-8');
 
      const uploadOptions = {
        hostname: this.options.hostname,
        port: this.options.port,
        path: this.options.path,
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
          'Content-Length': sourceMapContent.length
        }
      };
 
      const req = https.request(uploadOptions, (res) => {
        if (res.statusCode < 200 || res.statusCode >= 300) {
          console.error(`Upload failed with status code: ${res.statusCode}`);
        } else {
          console.log('SourceMap uploaded successfully');
        }
        callback();
      });
 
      req.on('error', (e) => {
        console.error(`Upload error: ${e.message}`);
        callback();
      });
 
      req.write(sourceMapContent);
      req.end();
    });
  }
}
 
module.exports = AutoUploadSourceMapPlugin;

使用这个插件的方法是在webpack配置文件中如下配置:

const AutoUploadSourceMapPlugin = require('./AutoUploadSourceMapPlugin');
 
module.exports = {
  // ... 其他webpack配置
  plugins: [
    new AutoUploadSourceMapPlugin({
      hostname: 'your-server.com',
      port: 443,
      path: '/path/to/upload/sourceMap'
    })
  ]
};

http://www.kler.cn/news/316767.html

相关文章:

  • MySQL高阶1831-每天的最大交易
  • 通过spring-boot创建web项目
  • 数据爬虫中遇到验证码的解决方法
  • 3 pyqt5 Layout布局(保证主界面缩放各组件也对应缩放)== 主要有Qt Designer和完全代码设置两种设计方式(根据自己情况选择即可)
  • 类中的特殊内容
  • 高效高质量SCI论文撰写及投稿
  • 聊聊AUTOSAR:基于Vector MICROSAR的TC8测试开发方案
  • 使用SpringCloud构建可伸缩的微服务架构
  • Matplotlib在运维开发中的应用
  • Java设计模式—面向对象设计原则(六) ----->合成复用原则(CRP) (完整详解,附有代码+案例)
  • MySQL篇(事务 - 基础)
  • 华为高级交换技术笔记 2024-2025
  • 【小白向】怎么去除视频水印?HitPaw帮你轻松解决
  • springboot系列--web相关知识探索一
  • GUI编程之MATLAB入门详解(01)
  • git删除本地+远程提交记录
  • Android IME输入法启动显示隐藏流程梳理
  • Java工厂模式
  • Qt系统相关——QThread
  • 代码随想录冲冲冲 Day53 图论Part5
  • C++基础知识7 list
  • CF1494F Delete The Edges 题解
  • Java代码调用https(SSL证书验证问题)
  • 828华为云征文 | 将Vue项目部署到Flexus云服务器X实例并实现公网访问
  • 使用Conda配置python环境到Pycharm------Window小白版
  • SVN泄露 CTFHUB 解题笔记
  • 论文不会写快来看!分享4款ai改写论文软件
  • uni-app快速入门
  • 异常值理解
  • 尚品汇-秒杀商品定时任务存入缓存、Redis发布订阅实现状态位(五十一)