当前位置: 首页 > 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/a/316767.html

相关文章:

  • ubuntu20.04 解决Pytorch默认安装CPU版本的问题
  • 密码学的基本原理
  • Springboot 日志处理(非常详细)
  • 不对称信息
  • 【QT】QSS
  • 图像处理实验二(Image Understanding and Basic Processing)
  • 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