最近一段时间在学习和实践React Native,做一些有趣有用总结和大家分享。这个系列文章可以在这里找到。
创建本地jsbundle
参考这里
可以不通过访问server的方式,而是直接用bundle管理JS文件,也可以在提交时直接附加上去。
main.jsbundle
就是这个文件,但是它现在是红色,进入到项目目录看到确实没有这个文件,那么要如何生成呢?
React Native bundle
- 进入项目根目录运行
react-native bundle --dev true --platform ios --entry-file index.ios.js --dev false --bundle-output 'main.jsbundle'
。
如果采用读取bundle的调试方式,每次js代码改动之后都需要运行
react-native bundle
命令生成新的bundle,再reload它。因此这个bundle建议可以在production的时候用,本地调试还是访问server更方便。
有几个必选参数需要解释一下:
- --entry-file:我们的JS程序入口文件,如
index.ios.js
; - --platform:
ios
或android
; - --dev:是否在开发环境,默认值为
true
。在开发环境下会打开开发警告和性能优化限制。如果是发布环境推荐将这个参数设置为false
。发布环境下要确保项目的build configuration也设置为Release,React Native根据Xcode's Release configuration会做一些配置,比如关闭摇一摇展现开发菜单的手势; - --bundle-output:输出的jsbundle文件,如
main.jsbundle
。
可选参数: - --minify:是否采用Uglify压缩JS;
- --sourcemap-output:0.14之后不再自动生成source map,需要手动指定这个参数。
生成之后再次回到Xcode如果仍为红色(找不到),可能是引用的目录问题,删掉重新引用一下
.jsbundle
即可。
发布时,从本地bundle读取JS文件
更改jsCodeLocation
,默认生成的项目中此代码在AppDelegate.m
文件中。
注释jsCodeLocation = [NSURL URLWithString:@"http://localhost:8081/index.ios.bundle?platform=ios&dev=true"];
这行代码,然后取消jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
这行代码的注释即可,注意bundle的文件名自定义了的话要修改一下。