2016-09-30 160 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