Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

Taro 原生 React Native 壳子

License

NotificationsYou must be signed in to change notification settings

NervJS/taro-native-shell

Repository files navigation

参考文档:Taro React Native 端开发流程 - 分离模式

Taro 原生 React Native 壳工程,和 React Native init 的工程的区别如下:

  1. 集成了expo
  2. 集成了 Taro 依赖的所有原生库
  3. debug 方式变更: 在 JS 工程中pnpm dev:rn 启动 metro server
  4. release 方式变更: 在 JS 工程中pnpm buid:rn 打包 jsbundle 并通过配置rn.output 输出到壳工程

该仓库如何生成

  1. 使用react-native初始化项目
npx react-native init taroDemo --version 0.73.0
  1. 使用expo-cli自动安装 expo
npx install-expo-modules@latest
  1. 修改部分代码以支持 Taro,此部分可以直接 cherry-pick

    • [scripts] 修改android,ios 脚本,增加upgradePeerdeps 脚本
    • [devDependencies] 增加install-peerdepspod-install
    • [ios] 添加相关 APP 权限说明
    • [ios] 使用亮色主题
    • [android] 添加国内 maven 源
    • [android] 添加 gif 支持
    • [android] 注释原 react native 打包
    • [android] 使用亮色主题
    • [docs] 复制该README.md 文件
    • [license] 复制 LICENSE 文件
  2. 更新 Taro 需要的依赖(如果还没正式发布,则使用对应的 alpha 或 beta 版本)

pnpmpnpm upgradePeerdeps
  1. 添加打包脚本,此部分可以直接 cherry-pick
    • [fastlane] 添加 Android、iOS fastlane 配置
    • [actions] 添加 Android、iOS 打包脚本
    • [ios] 添加默认图标
    • [ios] 添加 ITSAppUsesNonExemptEncryption false
    • [ios] 添加 main.jsbundle assets 引用

React Native 小版本更新

https://react-native-community.github.io/upgrade-helper/

Taro 版本更新

使用 Taro 最新版,或者修改upgradePeerdeps 指定 Taro 版本,再执行:

pnpm upgradePeerdeps

附:Taro 原生依赖明细表

feat-add-dep-analysis-scripte 脚本生成,如需裁剪壳工程,可参考此附录。

taro-rn

{  authorize:Set(3){'expo-camera@~14.0.0','expo-image-picker@~14.7.0','expo-location@~16.5.1'},  chooseImage:Set(4){'@react-native-camera-roll/camera-roll@~7.2.0','expo-camera@~14.0.0','expo-image-picker@~14.7.0','react-native-safe-area-context@~4.8.0'},  chooseMedia:Set(4){'@react-native-camera-roll/camera-roll@~7.2.0','expo-camera@~14.0.0','expo-image-picker@~14.7.0','react-native-safe-area-context@~4.8.0'},  chooseVideo:Set(4){'@react-native-camera-roll/camera-roll@~7.2.0','expo-camera@~14.0.0','expo-image-picker@~14.7.0','react-native-safe-area-context@~4.8.0'},  clearStorage:Set(1){'@react-native-async-storage/async-storage@~1.21.0'},  compressImage:Set(1){'@bam.tech/react-native-image-resizer@~3.0.5'},  createCameraContext:Set(1){'expo-camera@~14.0.0'},  createInnerAudioContext:Set(1){'expo-av@~13.10.0'},  downloadFile:Set(1){'expo-file-system@~16.0.0'},  getAppBaseInfo:Set(1){'react-native-device-info@~10.12.0'},  getClipboardData:Set(1){'@react-native-clipboard/clipboard@~1.13.0'},  getFileInfo:Set(1){'expo-file-system@~16.0.0'},  getLocation:Set(2){'@react-native-community/geolocation@~3.1.0','expo-location@~16.5.1'},  getNetworkType:Set(1){'@react-native-community/netinfo@~11.2.0'},  getRecorderManager:Set(2){'expo-av@~13.10.0','expo-file-system@~16.0.0'},  getSavedFileInfo:Set(1){'expo-file-system@~16.0.0'},  getSavedFileList:Set(1){'expo-file-system@~16.0.0'},  getScreenBrightness:Set(1){'expo-brightness@~11.8.0'},  getSetting:Set(3){'expo-camera@~14.0.0','expo-image-picker@~14.7.0','expo-location@~16.5.1'},  getStorage:Set(1){'@react-native-async-storage/async-storage@~1.21.0'},  getStorageInfo:Set(1){'@react-native-async-storage/async-storage@~1.21.0'},  getSystemInfo:Set(2){'react-native-safe-area-context@~4.8.0','react-native-device-info@~10.12.0'},  getSystemInfoSync:Set(2){'react-native-safe-area-context@~4.8.0','react-native-device-info@~10.12.0'},  offAccelerometerChange:Set(1){'expo-sensors@~12.9.0'},  offDeviceMotionChange:Set(1){'expo-sensors@~12.9.0'},  offGyroscopeChange:Set(1){'expo-sensors@~12.9.0'},  offLocationChange:Set(1){'@react-native-community/geolocation@~3.1.0'},  offNetworkStatusChange:Set(1){'@react-native-community/netinfo@~11.2.0'},  onAccelerometerChange:Set(1){'expo-sensors@~12.9.0'},  onDeviceMotionChange:Set(1){'expo-sensors@~12.9.0'},  onGyroscopeChange:Set(1){'expo-sensors@~12.9.0'},  onLocationChange:Set(1){'@react-native-community/geolocation@~3.1.0'},  onNetworkStatusChange:Set(1){'@react-native-community/netinfo@~11.2.0'},  openSetting:Set(3){'expo-camera@~14.0.0','expo-image-picker@~14.7.0','expo-location@~16.5.1'},  previewImage:Set(5){'@react-native-camera-roll/camera-roll@~7.2.0','expo-camera@~14.0.0','expo-image-picker@~14.7.0','react-native-safe-area-context@~4.8.0','expo-file-system@~16.0.0'},  removeSavedFile:Set(1){'expo-file-system@~16.0.0'},  removeStorage:Set(1){'@react-native-async-storage/async-storage@~1.21.0'},  saveFile:Set(1){'expo-file-system@~16.0.0'},  saveImageToPhotosAlbum:Set(4){'@react-native-camera-roll/camera-roll@~7.2.0','expo-camera@~14.0.0','expo-image-picker@~14.7.0','react-native-safe-area-context@~4.8.0'},  saveVideoToPhotosAlbum:Set(4){'@react-native-camera-roll/camera-roll@~7.2.0','expo-camera@~14.0.0','expo-image-picker@~14.7.0','react-native-safe-area-context@~4.8.0'},  scanCode:Set(5){'react-native-safe-area-context@~4.8.0','expo-camera@~14.0.0','expo-barcode-scanner@~12.9.0','@react-native-camera-roll/camera-roll@~7.2.0','expo-image-picker@~14.7.0'},  setClipboardData:Set(1){'@react-native-clipboard/clipboard@~1.13.0'},  setKeepScreenOn:Set(1){'expo-keep-awake@~12.8.0'},  setScreenBrightness:Set(1){'expo-brightness@~11.8.0'},  setStorage:Set(1){'@react-native-async-storage/async-storage@~1.21.0'},  showActionSheet:Set(1){'react-native-safe-area-context@~4.8.0'},  startAccelerometer:Set(1){'expo-sensors@~12.9.0'},  startDeviceMotionListening:Set(1){'expo-sensors@~12.9.0'},  startGyroscope:Set(1){'expo-sensors@~12.9.0'},  startLocationUpdate:Set(1){'@react-native-community/geolocation@~3.1.0'},  stopAccelerometer:Set(1){'expo-sensors@~12.9.0'},  stopDeviceMotionListening:Set(1){'expo-sensors@~12.9.0'},  stopGyroscope:Set(1){'expo-sensors@~12.9.0'},  stopLocationUpdate:Set(1){'@react-native-community/geolocation@~3.1.0'},  uploadFile:Set(1){'expo-file-system@~16.0.0'}}

taro-components-rn

{  Camera:Set(3){'expo@~50.0.2','expo-camera@~14.0.0','expo-barcode-scanner@~12.9.0'},  Image:Set(1){'react-native-svg@~14.1.0'},  Picker:Set(1){'@react-native-picker/picker@~2.6.1'},  PickerView:Set(1){'@react-native-picker/picker@~2.6.1'},  RichText:Set(1){'react-native-webview@~13.6.3'},  Slider:Set(1){'@react-native-community/slider@~4.4.2'},  Swiper:Set(1){'react-native-pager-view@~6.2.0'},  Video:Set(3){'expo@~50.0.2','expo-av@~13.10.0','react-native-svg@~14.1.0'},  CoverImage:Set(1){'react-native-svg@~14.1.0'},  WebView:Set(1){'react-native-webview@~13.6.3'}}

[8]ページ先頭

©2009-2025 Movatter.jp