字符串替换加载器不使用webpack 3

时间:2017-08-20 13:24:53

标签: webpack webpack-dev-server webpack-2 webpack-3

我正在使用webpack 3&试图使用string replace loader

此代码用于webpack1.X

module: {
    loaders: [
      {
        test: /fileName\.js$/,
        loader: 'string-replace',
        query: {
          search: 'jQuery',
          replace: 'window.$'
        }
      }
    ]
  }

我也试过这个:

module: {
        loaders: [
          {
            test: /fileName\.js$/,
            loader: 'string-replace-loader',
            query: {
              search: 'jQuery',
              replace: 'window.$'
            }
          }
        ]
      }

我需要做些什么才能确保此加载程序在webpack 3中正常工作。没有错误,但在目标文件中没有替换字符串。

3 个答案:

答案 0 :(得分:1)

您是否尝试将flags: 'g'添加到查询选项中:

query: {
    search: 'jQuery',
    replace: 'window.$'
    flags: 'g'
}

答案 1 :(得分:1)

WebPack 2更改了必须将配置传递给加载程序的方式。所以你可以试试(我没试过这个):

module: {
  rules: [{
    test: /fileName\.js$/,
    use: {
      loader: 'string-replace',
      options: {
        query: {
          search: 'jQuery',
          replace: 'window.$'
        }
      }
    }
  }]
}

或者你可以尝试这个字符串替换加载器,因为它似乎是为WebPack 2编写的。 https://github.com/dmitrySheshko/replace-string-loader

您可以自己编写: https://webpack.js.org/contribute/writing-a-loader/

的字符串替换-loader.js

const { getOptions } = require('loader-utils');

module.exports = function(source) {
  const options = getOptions(this);
  return source.replace(options.replace, options.with);
};

webpack.config.js

module: {
  rules: [{
    test: /fileName\.js$/,
    use: {
      loader: resolve(__dirname, './string-replace-loader.js'),
      options: {
        replace: /jQuery/gi,
        with: 'window.$'
      }
    }
  }]
}

答案 2 :(得分:0)

在Webpack 3和Webpack 4中,您可以使用string-replace-webpack-plugin在编译时按模式执行字符串替换。

对于Webpack 3,将以下代码添加到您的webpack.config.js中:

var StringReplacePlugin = require("string-replace-webpack-plugin");
module.exports = {
   module: {
      loaders: [
         // configure replacements for file patterns
         { 
            test: /fileName\.js$/,
            loader: StringReplacePlugin.replace({
                replacements: [
                    {
                        pattern: /jQuery/g,
                        replacement: function (_match, _p1, _offset, _string) {
                            return "window.$";
                        }
                    }
                ]})
            }
      ]
   },
   plugins: [
      // an instance of the plugin must be present
      new StringReplacePlugin()
   ]
}

对于Webpack 4,语法如下:

var StringReplacePlugin = require("string-replace-webpack-plugin");
module.exports = {
   module: {
      rules: [{ 
         test: /fileName\.js$/,
         use: [{
            loader: StringReplacePlugin.replace({
               replacements: [{
                  pattern: /jQuery/g,
                  replacement: function (_match, _p1, _offset, _string) { return "window.$"; }
                  }]
            })
         }]
      }]
   },
   plugins: [
      new StringReplacePlugin()
   ]
}