webpack插件给所有的:src文件目录增加前缀

1.webpack4的版本写法

javascript 复制代码
class AddPrefixPlugin {
  apply(compiler) {
    compiler.hooks.compilation.tap('AddPrefixPlugin', (compilation) => {
      HtmlWebpackPlugin.getHooks(compilation).beforeEmit.tapAsync(
        'AddPrefixPlugin',
        (data, cb) => {
          // 使用正则表达式替换所有包含 /static/file/ 的路径
          data.html = data.html.replace(/\/static\/file\//g, '/zhgdxmf/static/file/');
          cb(null, data);
        }
      );
    });
    compiler.hooks.emit.tapAsync('AddPrefixPlugin', (compilation, callback) => {
      // 遍历所有输出的资源文件,替换其中的 /static/file/ 路径
      Object.keys(compilation.assets).forEach((assetName) => {
        if (assetName.endsWith('.js') || assetName.endsWith('.html')) {
          let content = compilation.assets[assetName].source();
          content = content.replace(/\/static\/file\//g, '/zhgdxmf/static/file/');
          compilation.assets[assetName] = {
            source: () => content,
            size: () => content.length
          };
        }
      });
      callback();
    });
  }
}

module.exports = AddPrefixPlugin;

webpack 2 的版本

javascript 复制代码
function AddPrefixPlugin(options) {
  this.options = options || {};
}

AddPrefixPlugin.prototype.apply = function(compiler) {
  compiler.plugin('compilation', (compilation) => {
    compilation.plugin('html-webpack-plugin-before-html-processing', (htmlPluginData, callback) => {
      // 使用正则表达式替换所有包含 /static/file/ 的路径
      htmlPluginData.html = htmlPluginData.html.replace(/\/static\/file\//g, '/zhgdxmf/static/file/');
      callback(null, htmlPluginData);
    });

    compilation.plugin('optimize-assets', (assets, callback) => {
      // 遍历所有输出文件,替换其中的 /static/file/ 路径
      Object.keys(assets).forEach((assetName) => {
        if (assetName.endsWith('.js') || assetName.endsWith('.html')) {
          let content = assets[assetName].source();
          content = content.replace(/\/static\/file\//g, '/zhgdxmf/static/file/');
          assets[assetName] = {
            source: () => content,
            size: () => content.length
          };
        }
      });
      callback();
    });
  });
};

module.exports = AddPrefixPlugin;

使用


全程借助chatgpt完成,感慨能力之强大啊

相关推荐
To_OC4 小时前
从一头雾水到跑通全流程:我用一个周末啃透了JWT登录鉴权
前端·后端·http
excel6 小时前
研究 Vue 3 源码的收获
前端·vue.js
可乐鸡翅yeah_7 小时前
业务中 M3U8 水印相关坑,硬水印和动态水印区别
前端·网络·数据库·ffmpeg·m3u8在线
lerhxx8 小时前
AI 应用如何高效优雅地恢复中断?—— "连接解耦 + 状态持久化"
前端·javascript
计算机魔术师8 小时前
METR 演示 AI 智能体如何篡改 Inspect 评估记录以掩盖不当行为
前端
前端snow8 小时前
ai agent --- 异步处理之 Rabbit MQ
前端
念何架构之路8 小时前
zap扩展生态与总结
java·前端·数据库
独孤九剑打醒他9 小时前
【原创开源】【概念设计】源 - 栅 - 漏 - 栅 - 源 横向双栅 MOS,低压交流多值逻辑芯片探索
前端·其他·架构·开源·硬件工程
HaipengYu9 小时前
深度解密 OpenCode 2 插件加载机制:Dual-Version (V1/V2) 适配实战与官方文档的“隐形陷阱”
node.js
mantou1329 小时前
我给 AI Agent 做了个「油猴」:让 Claude Code / Codex 直接用你已登录的浏览器
前端·javascript·后端