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  
              }  
            ]  
          })  
        }  
      }  
    ]  
  }  
};
相关推荐
雪隐8 分钟前
用Flutter做背单词APP-04一个人,2周,从零撸出一个背单词App
前端·人工智能·后端
OpenTiny社区26 分钟前
Skill 设计:封装、评测、运营,一次讲透
前端·github
大白要努力!27 分钟前
uni-app 全面入门速查手册
前端·uni-app
索西引擎33 分钟前
【React】虚拟 DOM:原理、机制与核心价值分析
前端·react.js·前端框架
console.log('npc')36 分钟前
网页移动端UI/UX Pro Max - 设计智能skill
前端·人工智能·ui·ux
javajenius1 小时前
Masslynx 4.1安装包免费下载及详细安装教程
java·服务器·前端·其他
gis开发之家2 小时前
《Vue3 从入门到大神29篇》单元测试与 E2E 测试 —— 保障 Vue3 项目的质量
前端·javascript·vue.js·单元测试·前端框架·vue3
爱勇宝2 小时前
AI 时代,更稀缺的是「提出好问题」还是「判断好答案」?
前端·人工智能·后端
李伟_Li慢慢2 小时前
three.js 中的WebGPU 有几成熟了?
前端·three.js
阿酷tony2 小时前
纯HTML5播放器带倍速、带画质切换的播放器
前端·html·html5