解决React Native引入realm导致编译卡顿问题
在React Native项目中引入realm后,在编译阶段,网络状况不好的时候会卡在realm模块下载的地方。现象是如果在终端用react-native run-ios,则会卡在Download realm-sync-cocoa-${version}.tar.xz,如果是Xcode,则会卡在Build ${ProjectName}: RealmJS这一块。
这主要是因为realm的库太大(realm-sync-cocoa-${version}.tar.xz包大概是50+M)。所以我们可以考虑把包先下载到本地,以减少每次编译的时间。
- 我们可以从realm-cocoa的build.sh文件中找到realm-sync-cocoa-${version}.tar.xz的下载地址(注:${version}是具体的版本号),下载文件。
- 在命令行输入getconf DARWIN_USER_TEMP_DIR,获取文件下载的临时目录
- 将下载的文件拷贝到临时目录
- 这样基本就OK。
如果还不行,则可以考虑以下操作:
- 修改下载的脚本代码了。找到node_modules/realm/scripts/download_realm.js;
- 找到download()函数,将其中的saveFile()函数作如下修改;
function saveFile() {
	if (process.stdout.isTTY) {
		printProgress(response.body, parseInt(response.headers.get('Content-Length')), archive);
	} else {
		console.log(`Downloading ${archive}`);
	}
	
	return new Promise((resolve) => {
		// const file = fs.createWriteStream(destination);
		// response.body.pipe(file).once('finish', () => file.close(resolve));
		resolve();
	}).then(() => fs.utimes(destination, lastModified, lastModified));
}
最后运行react-native run-ios。
参考