最近以React Native技術開發App應用,搭建專案時遇到坑頗多,網上查詢解決方法費時,費精力,總結一些問題,希望能對讀者有所幫助。
這次遇見的問題是babel編譯ES6原始碼時,丟擲的異常,導致無法啟動專案,執行react-native run-ios
,啟動模擬器後報錯:
可以看到,有用的資訊:Error bundling Cannot find module @babel/core,而使用react-native-cli
建立的React Native App應用使用的是babel預設方案:babel-preset-react-native
,這是它的最新版本的一個bug,我們可以將其版本退回至2.1.0
,首先刪除它(使用yarn或npm進行安裝包管理皆可):
yarn remove babel-preset-react-native
or
npm unstall babel-preset-react-native
複製程式碼
然後安裝指定版本:
yarn add --dev babel-preset-react-native@2.1.0
or
npm install --save-dev babel-preset-react-native@2.1.0
複製程式碼
最後,再次啟動應用:
react-native run-ios
or
react-native run-android
複製程式碼
應用正常執行。
React Native 版本問題
當然也許你還會遇到一個異常:
這個問題是由於最新React Native版本,需要Xcode版本大於9,Mac OS大於11,所以可以將React Native版本將至0.53.3
:
react-native init myApp --version 0.53.3
複製程式碼
Babel preset版本問題
前面對於babel編譯問題,指出將版本回降至2.1.0
,正常是沒有問題的,但是如果使用了ES6新語法generator
時,需要注意,下面這種export
匯出寫法,將會報錯:
export default function * root () {
yield ...
}
複製程式碼
需要改成如下匯出方式,先賦值再匯出:
const root = function * root () {
yield ...
}
export default root;
複製程式碼
當然,如果不希望修改程式碼,則需要將babel-preset-react-native
版本降至2.0.0
:
rm -rf ./node_modules
yarn cache clean or npm cache clean
yarn add --dev babel-preset-react-native@2.0.0
yarn install
watchman watch-del-all // 如果使用了watchman
複製程式碼
然後殺掉上次應用啟動的程式,重新啟動應用,即可正常編譯,執行:
react-native run-ios
複製程式碼