webpack打包批量替换路径(string-replace-webpack-plugin插件)

**string-replace-webpack-plugin**是一个用于在 webpack 打包后的文件中替换字符串的插件。它可以用于将特定字符串替换为其他字符串,例如将敏感信息从源代码中移除或对特定文本进行本地化处理。比如文件的html、css、js中的路径地址想批量更改一下

http://localhost:7777/image/111.jpg

改为

http://localhost:7777/web/static/image/111.jpg

文件太多挨个改太多,通过string-replace-webpack-plugin在打包的时候批量替换。

一、安装插件

复制代码
npm install --save-dev string-replace-loader

二、引入插件

在打包的js中引入插件,如果是开发和正式两个js,注意查看自己的是哪个js。

通过require引入string-replace-webpack-plugin插件,然后在plugins中进行初始化。

复制代码
const StringReplacePlugin = require('string-replace-webpack-plugin');  
  
module.exports = {  
  module: {  
    rules: [  
      {  
        test: /\.js$/,  
        exclude: /node_modules/,  
        use: {  
          loader: StringReplacePlugin.replace({  
            replacements: [  
              {  
                pattern: 'foo',  
                replacement: 'bar'  
              }  
            ]  
          })  
        }  
      }  
    ]  
  },
    plugins: [
      new VueLoaderPlugin(),
      ...
      new StringReplacePlugin(),
      ....
    ].concat(htmlPlugin()),  
};

三、配置替换规则

最好将string-replace-webpack-plugin插件的解析放在所有加载的最后面,替换规则可以写正则表达式,注意加上flags为gim,要不然只替换一个

flags 参数用于指定正则表达式的标志。它可以接受一个字符串或一个标志的数组。

标志用于指定正则表达式的匹配行为。一些常见的标志包括:

  • g:全局匹配(global),替换所有匹配的字符串,而不仅仅是第一个。

  • i:不区分大小写(ignore case),进行不区分大小写的匹配。

  • m:多行模式(multiline),将正则表达式应用到多行文本中

    下面是替换css文件中的图片地址,将/image/改为**/web/static/image** :

    module.exports = {
    module: {
    rules: [
    {
    //其他的
    },

    复制代码
                {
                  test: /\.css$/,
                  use: [
                    MiniCssExtractPlugin.loader, 
                    'css-loader',
                    {
                      //替换字符  必须放在最后
                      loader: 'string-replace-loader',
                      options: {
                        strict: true,
                        multiple: [
                          {
                            search: '\/image\/',
                            replace: '\/web\/static\/image\/',
                            flags: 'gim' // 指定全局、不区分大小写和多行模式标志 
                          }
                        ],
                      }
                    }
                  ]
                },

使用正则也可以用,这里提一下大模型真的很赞,下面的示例是大模型生成

复制代码
const StringReplacePlugin = require('string-replace-webpack-plugin');  
  
module.exports = {  
  module: {  
    rules: [  
      {  
        test: /\.js$/,  
        exclude: /node_modules/,  
        use: {  
          loader: StringReplacePlugin.replace({  
            replacements: [  
              {  
                pattern: /foo\s+bar/g, // 使用正则表达式匹配 foo 后跟一个或多个空格和 bar 的字符串,并全局替换(g 标志)  
                replacement: 'foobar' // 将匹配到的字符串替换为 foobar  
              }  
            ]  
          })  
        }  
      }  
    ]  
  }  
};
相关推荐
前端付豪1 分钟前
Nest 项目小实践之图书展示和搜索
前端·node.js·nestjs
wuhen_n2 分钟前
Vue Router与响应式系统的集成
前端·javascript·vue.js
青青家的小灰灰33 分钟前
金三银四面试官最想听的 React 答案:虚拟 DOM、Hooks 陷阱与大型列表优化
前端·react.js·面试
HelloReader33 分钟前
深入理解 Tauri 架构与应用体积优化实战指南
前端
lemon_yyds34 分钟前
vue 2 升级vue3 : ref 和 v-model 命名为同名
前端·vue.js
codingWhat34 分钟前
小程序里「嵌」H5:一套完整可落地的 WebView 集成方案
前端·uni-app·webview
重庆穿山甲38 分钟前
Java开发者的大模型入门:Spring AI Alibaba组件全攻略(二)
前端·后端
光影少年41 分钟前
在 React 中,什么情况下需要用 useCallback 和 useMemo?它们的区别是什么?
前端·react.js·掘金·金石计划
合天网安实验室41 分钟前
H2O-3反序列化漏洞分析(CVE-2025-6507&CVE-2025-6544)
前端·黑客
袋鱼不重42 分钟前
Typescript 核心概念
前端·typescript