webpack-replace-loader icon indicating copy to clipboard operation
webpack-replace-loader copied to clipboard

it not works! I want to replace dev code in prod env in webpack4.6

Open wxungang opened this issue 6 years ago • 1 comments

it not works! I want to replace dev code in prod env!

// Add a response interceptor
axios.interceptors.response.use(function (response) {
  //@replaceStart
  // Do something with response data
  response.key = '1104'//just for dev code
  //@replaceEnd
  return response;
}, function (error) {
  // Do something with response error

  return Promise.reject(error);
});

webpack.js

  {
        test: /\.js$/,
        loader: "string-replace-loader",
        options: {
          search: "@replaceStart[\w\W\s]*?@replaceEnd",
          replace: "",
          flags: 'g'
        }
      },

or

{
        test: /\.jsx?$/,
        exclude: /node_modules/,
        use: [
          'babel-loader',
          {
            // test: /\.js$/,
            loader: "string-replace-loader",
            options: {
              search: "@replaceStart[\w\W\s]*?@replaceEnd",
              replace: "",
              flags: 'g'
            }
          }
        ]
      },

wxungang avatar May 14 '18 08:05 wxungang

你好,你这种情况 this Loader 确实是没有办法处理的。 当初写这个 loader 的时候仅仅是为了处理我自己的工作中碰到打包问题。这是一个简单的字符串替换函数,功能很单一,仅仅可以替换字符串。为了使用方便,减少正则书写,所以设计为 search 是一个普通字符串,内部才将它将它转换为 RegExp 对象。

你这个问题可以如下修改 就能解决, 你试试。

// Add a response interceptor
axios.interceptors.response.use(function (response) {
  $replaceString$ // 已经做了全字符转义,这个你可以随便写,保证不重复,别替换错了就行。
  return response;
}, function (error) {
  // Do something with response error

  return Promise.reject(error);
});

假设你的 webpack 有如下 3 个配置文件:base.js、dev.js、build.js。。

base.js 不用修改 dev.js 如下修改

    {
        test: /\.js$/,
        loader: "webpack-replace-loader",
        options: {
          search: "@replaceString@",
          replace: "response.key = '1104'",
          flags: 'g'
        }
      }

build.js如下修改

    {
        test: /\.js$/,
        loader: "webpack-replace-loader",
        options: {
          search: "@replaceString@",
          replace: "",
          flags: 'g'
        }
      }

以上,如有问题欢迎接着讨论哦。

beautifulBoys avatar May 14 '18 08:05 beautifulBoys