新建一個項目,并且在項目中使用antd前端框架的Menu組件時報錯,具體錯誤信息如下圖:
image.png
代碼如圖:
image.png
NPM的報錯信息:
image.png
you have multiple copies of React loaded(你有多個副本的反應加載)
分析一波,這個報錯簡單來說是引入了兩個react,可能的情況如下
1.peerDependencies配置錯誤,導致版本重復 通常是在插件(modules)開發的場景下,你的插件需要某些依賴的支持,但是你又沒必要去安裝, 因為插件的宿主會去安裝這些依賴,你就可以用peerDependencies去聲明一下需要依賴的插件和版本, 如果出問題npm就會有警告來提醒使用者去解決版本沖突問題。
so,簡單的來說:就是插件所使用的依賴包不會直接安裝,而會直接使用宿主的依賴包
"peerDependencies": {
"react": "^0.14.0 || ^15.0.0-rc",
"react-dom": "^0.14.0 || ^15.0.0-rc"
}
2.插件開發,使用webpack打包,然后通過 HTML script 引入了react.js 和 react-dom.js 和 插件(例如這里的dist/CFRichEditor.js) , 這時候webpack就應該把react,react-dom排除在打包之外。否則會重復 webpack配置:
externals: {
"react": 'React', // 這時候,webpack會創建一個全局變量 React 替代react模塊,而不去打包react.js。
'react-dom': 'ReactDOM' // 同理
}
解決辦法:
是因為我之前在項目中安裝了其它版本的react包,而antd組件自動引入了自身所需要的react包,這樣導致不同版本的兩個react運行