2015-07-01 12 views
30

考慮到以下目錄結構反應時加載兩次:如何避免的WebPack發展

my-project 
| 
|-- node_modules 
    | 
    |-- react 
    |-- module-x 
     | 
     |--node_modules 
      | 
      |--react 

你可以看到這兩個我的項目模塊-X需要作出反應。我遇到了與this question中描述的相同的問題,但建議是從package.json依賴項中刪除反應。我這樣做,它可以正常工作,只要在module-x中沒有安裝node_modules,因爲Webpack將使用來自my-project的React。但是,如果我正在開發module-x並安裝了node_modules,則Webpack將使用來自my-projectmodule-x的React。

有沒有一種方法可以讓Webpack確保只使用React的一個實例,即使它在兩個單獨的級別上是必需的?

我知道我可以保持模塊-X在開發時,一個單獨的目錄,但似乎我不得不發佈,然後安裝在我的項目測試它,這不是很高效。我想過npm link,但沒有運氣,因爲它仍然在module-x中安裝了node_modules。

This here聽起來很像我遇到的同樣的挑戰,但它似乎不像npm dedupe或Webpack的重複數據刪除選項可以工作。我可能不瞭解一些重要的細節。

回答

69

使用npm link時,通常會出現此問題。鏈接的模塊將在其自己的模塊樹中解析其依賴關係,這與需要它的模塊不同。因此,npm link命令安裝peerDependencies以及dependencies

您可以使用resolve.alias強制require('react')解析爲您本地版本的React。

resolve: { 
    alias: { 
    react: path.resolve('./node_modules/react'), 
    }, 
}, 
+0

我已經在這個問題上花了半天的時間。不幸的是,瀏覽器中的錯誤信息和Webpack文檔都不是很有幫助。你已經救了我的一天!謝謝!! –

+0

這是一個非常好的解決方案,非常感謝你 - 這意味着我可以使用npm鏈接,而不會撕掉我的頭髮:-) –

+0

使用'npm鏈接'時出現如此奇怪的警告,謝謝。 – Oscar

22

如果你不想(或不能)修改項目配置,還有一個更簡單的解決方案:只要npm link陣營本身返回到項目:

# link the component 
cd my-app 
npm link ../my-react-component 

# link its copy of React back to the app's React 
cd ../my-react-component 
npm link ../my-app/node_modules/react 
+1

這是一個非常好的答案。運行依賴於'npm link'ed項目的測試時,我遇到了上述問題。在這種情況下,webpack配置將不會產生任何影響,但這個答案可以簡潔地解決問題。 – sam