2016-09-30 118 views
0

我正在使用webpack捆绑我的项目。为了处理一些文件,我需要替换某个节点模块中的特定值。为了实现这一点,我使用了字符串替换加载器。我将下面的代码添加到了我的webpack配置中,但没有成功。Webpack字符串替换装载程序无法正常工作

{ 
    test: /\.js$/, 
    loader: 'string-replace', 
    query: { 
     search: '[MouseEvent]', 
     replace: '[]' 
    } 
    } 

在bundeld文件中,字符串未被替换。这些文件位于文件夹node_modules/ng2-bootstrap中。所以我可能必须指定这个以及?

回答

0

您应该使用include: [/node_modules\/module_name/],因为默认情况下webpack会排除node_modules。

但是当阅读类似的问题的问题,可能是你必须使用“排除,包括”像这样:

{ 
    test: /\.js$/, 
    loader: 'string-replace', 
    exclude: /node_modules(?!\/module_name)/ 
    query: { 
    search: '[MouseEvent]', 
    replace: '[]' 
    } 
} 

,如果你想读的问题,go here

编辑点评AFTER:

经过一番尝试,我这样做(与其他插件,但好像你的),我已经做了这个代码:

preLoaders: [ 
    { 
     test: /\.js$/, 
     loader: StringReplacePlugin.replace({ 
     replacements: [ 
      { 
      pattern: /.*?(react).*?/ig, 
      replacement: function (match, p1, offset, string) { 
       console.log("found"); 
       return "found"; 
      } 
      } 
     ]}), 
     include: /node_modules\\react.*/ 
    } 
    ], 

它可能适用于装载机,但我在预加载器上,因为我已经有一个js的加载程序。 请注意,该错误是在正则表达式的包括/排除

+0

thx为您的答案。但是,我首先写了include,但有点困惑,但在例子中它是排除的。我想它不包括,因为你说node_modules默认情况下被排除,并且(?!\/module_name)只是包含了特定的模块。我尝试了几个变化,现在没有成功 – crebuh

+0

我已经引用了第二种方法后,我看了问题链接。你有没有尝试过“排除方法”? – TeoMatthew

+0

我试过这两个包括:[/ node_modules \/ng2-bootstrap /]并排除:[/ node_modules(?!\/ng2-bootstrap)/]。为了测试,我把整个模块放到一个libs文件夹中。然后,我收到以下错误消息 错误./custom_modules/ng2-bootstrap/ng2-bootstrap.js 模块解析失败:/node_modules/string-replace-loader/index.js?{"search":"[MouseEvent ]“,”replace“:”[]“,”flags“:”g“}!/ custom_modules/ng2-bootstrap/ng2-bootstrap.js意外的标记(2:2) 您可能需要一个合适的加载器来处理文件类型。 node_modules被忽略,但加载程序有其他问题无论如何 – crebuh