react-native-cli 使用 cnpm 加快依赖安装速度
运行带有本地修改的 CLI
React Native 以两个 npm 包的形式分发,react-native-cli
和 react-native
,第一个是轻量级包,应该全局安装(npm install -g react-native-cli
),而第二个包含实际的 React Native 框架代码,并在您运行时本地安装到您的项目中 react-native init
。
因为 react-native init
调用 npm install react-native
,简单地将本地 github 克隆链接到 npm 并不足以测试本地更改。
介绍Sinopia
Sinopia 是一个在本地机器上运行的 npm 注册表,允许您向其发布包。其他一切都是从 npmjs.com
,我们将为 React Native CLI 开发设置 sinopia。首先,安装它:
$ npm install -g sinopia
现在您只需执行以下操作即可运行 sinopia:
$ sinopia
第一次运行它会创建一个默认配置文件。像这样打开 ~/.config/sinopia/config.yaml
并配置它(注意 max_body_size
):
storage: ./storage
auth:
htpasswd:
file: ./htpasswd
uplinks:
npmjs:
url: https://registry.npmjs.org/
packages:
'react-native':
allow_access: $all
allow_publish: $all
'react-native-cli':
allow_access: $all
allow_publish: $all
'*':
allow_access: $all
proxy: npmjs
logs:
- {type: stdout, format: pretty, level: http}
max_body_size: '50mb'
记得之后重启 sinopia。
发布到 sinopia
现在我们需要将两个 React Native 包发布到我们的本地注册表。为此,我们将 npm 配置为使用新注册表,取消发布任何现有包,然后发布新包:
react-native$ npm set registry http://localhost:4873/
react-native$ npm adduser --registry http://localhost:4873/
# Check that it worked:
react-native$ npm config list
react-native$ npm unpublish --force
react-native$ npm publish
react-native$ cd react-native-cli/
react-native-cli$ npm unpublish --force
react-native-cli$ npm publish
运行本地 CLI
现在软件包已经安装在 sinopia 中,您可以 react-native-cli
全局安装新软件包,当您使用时 react-native init
,它也会安装新 react-native
软件包:
$ npm uninstall -g react-native-cli
$ npm install -g react-native-cli
$ react-native init AwesomeApp
测试更改
大多数 CLI 代码都包含在 jest 测试中,您可以使用以下命令运行:
$ npm test
项目生成也包含在 e2e 测试中,您可以通过以下方式运行:
$ ./scripts/e2e-test.sh
这些测试实际上创建了与上面描述的非常相似的设置(使用 sinopia),它们还运行特定于 iOS 的测试,因此您需要在 OSX 上运行它并安装xctool。
这两种类型的测试也可以在 Travis 上连续运行,也可以在拉取请求上运行。
清理
要取消设置 npm 注册表,请执行以下操作:
$ npm set registry https://registry.npmjs.org/
# Check that it worked:
$ npm config list
故障排除
Sinopia 因 模块版本不匹配 而崩溃
这通常发生在您使用一个版本的 Node 安装包然后更改为不同的版本时。当您更新 Node 或使用 nvm 切换到不同版本时,可能会发生这种情况。做:
$ npm uninstall -g sinopia
$ npm install -g sinopia
升级到 Node 4 后,您可能还需要重新安装 npm。对我有用的是:
$ npm uninstall -g npm
$ nvm install npm
有关更多信息,请参阅 nvm 指南。
替代工作流程
如果您不想安装 Sinopia,您仍然可以通过创建示例项目并 react-native
在该项目上安装您的签出而不是从 npm 下载它来测试在 cli 上所做的更改。最简单的方法是:
$ npm init AwesomeProject
$ cd AwesomeProject
$ npm install $REACT_NATIVE_GITHUB
请注意,REACT_NATIVE_GITHUB
应该指向您有结帐的目录。
此外,如果您所做的更改在运行时被触发,react-native init AwesomeProject
您将需要调整全局安装 react-native-cli
库以安装本地结帐,而不是从 npm 下载模块。为此,只需更改此行并参考本地结帐即可。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: 如何阅读 JavaScript 源代码
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论