最近項(xiàng)目由react0.14.X升級(jí)到react 15版本,因?yàn)閞eact15還是做了一些相對(duì)大一點(diǎn)的更新的(詳情可以參考一下我的另一篇文章關(guān)于react15的一點(diǎn)總結(jié)),相對(duì);來(lái)說(shuō)react升級(jí)之后但react問(wèn)題并不太多。但是react相應(yīng)的配置,例如babel,react-hot-loader等相也做了一些升級(jí)。放到一起來(lái)說(shuō)問(wèn)題還是多一點(diǎn)的。這里把遇到的一些問(wèn)題和注意點(diǎn)拿出來(lái)給大家分享一下,能避免的坑還是要盡量繞開(kāi)的不是。
一、首先react15的包分成了react和react-dom兩部分分別打包,所以用到react-dom的地方,導(dǎo)入的位置就要換掉了。如下面圖示:
二、react,babel是環(huán)環(huán)相扣的。升級(jí)了react之后升級(jí)babel是在所難免的過(guò)程了,
注意升級(jí)的順序,babel->babel-*其他相關(guān)項(xiàng)->babel-core。原有相關(guān)依賴(lài)項(xiàng)不先行升級(jí)的話對(duì)babel-core的是有版本要求的,會(huì)導(dǎo)致升級(jí)失敗。
三、升級(jí)babel之后,原有babel5的寫(xiě)法已經(jīng)被廢棄,所以會(huì)報(bào)錯(cuò):
ReferenceError: [BABEL] XXXX.jsx: Unknown option: stage(或loose)
babel6只支持presets和plugins兩個(gè)屬性了。babel 最新版本babel6的相關(guān)配置解析可以看下這篇文章。此外,如果少引用了某個(gè)插件。會(huì)有類(lèi)似下面的報(bào)錯(cuò):
Module build failed: SyntaxError: index.js: Unexpected token 四、如果你用到了react-hot-loader實(shí)現(xiàn)熱加載的話,會(huì)遇見(jiàn)下面的錯(cuò)誤:
Cannot resolve module 'react/lib/ReactMount' switch to react-hot-loader 3.x!
剛才提到的相應(yīng)配置也要升級(jí),這是比較麻煩的一點(diǎn)。所以react-hot-loader要升級(jí)到3.X,不過(guò)我發(fā)現(xiàn)npm上最新的版本竟然也是beta版,希望不會(huì)有其他變動(dòng)。
五、僅僅是把react-hot-loader升級(jí)到3.X還不算完,升級(jí)完之后react-hot-loader的用法也要有相應(yīng)改變。此時(shí)會(huì)有下面的錯(cuò)誤:
不能像原來(lái)一樣在webpack中直接加載react-hot-loader:
需要從webpack中移除react-hot loader。.barbelrc中增加plugins屬性:react-hot-loader/babel。此處問(wèn)題比較多,大致應(yīng)該裝以下預(yù)設(shè)和插件(babel 最新版本babel6的相關(guān)配置解析可以看下這篇文章,更好理解):