起因
需要在RN项目中安装react-native的依赖,由于项目package.json中既有对私有库的依赖,也有对第三方库的依赖,因此本地镜像地址使用的是私有cnpm仓库(2.10.0)。但是在安装react-native的时候,其中一个RN依赖的库metro无法安装,报No compatible version found: metro
的错误,导致RN也安装失败。
一些尝试
首先google一下错误信息,发现这也是个常见错误,但不同的库错误原因不一样,无法聚焦,所以没有继续深入看这个问题。
然后去cnpm私服的web端做了一个同步metro的操作http://cnpm-web.jinhui365.cn/sync/metro
,发现报错ER_TRUNCATED_WRONG_VALUE_FOR_FIELD: Incorrect string value:
,把这错误在google了一下,第一个结果中的问题与这个错误非常一致,最高赞的回复也很明确,是因为mysql的某个字段使用的是utf8编码,只能支持3个字节,改成utf8mb4编码就可以了。
处理步骤
修改cnpm源码
将数据库编码和表的编码都改成utf8mb4
修改models/module.js文件,在module定义的options中增加
charset: 'utf8mb4'
的配置修改common/sequelize.js文件,config.database的定义中,增加
dialectOptions: {charset:'utf8mb4'},
的配置在根目录执行
bin/nodejsctl stop
,bin/nodejsctl start
重启服务。尝试通过cnpm私服安装react-native,正常通过