Reach 有一些子命令,每一个子命令都有自己的选项。
无论如何,所有的命令都支持以下选项:

  • 环境变量 REACH_VERSION ,标示使用的 Reach 版本。

5.2.1 reach compile

你可以执行以下命令编译 Reach 代码:
$ reach compile SOURCE EXPORT …
其中 SOURCE 是源文件,并且每个 EXPORT 是一个输出的 Reach.App .
如果没有提供 SOURCE ,则使用 index.rsh 。
如果没有提供 EXPORT ,则使用 main 。
reach compile 支持以下选项:

  • -o/—output ‹OUTPUT› —— 将编译器输出文件写入 默认为与 SOURCE 在同一文件夹下的名为 build 的文件夹。
  • —intermediate-files —— 编写中间文件,可能在调试编译错误或者调用其他上下文时起作用。

5.2.2 reach init

你可以执行以下命令来为一个简单的 Reach app 创建模板文件 index.rsh 和 index.mjs :
$ reach init


5.2.3 reach run

你可以执行以下命令来运行一个简单的 Reach 应用程序:
$ reach run APP
如果没有提供 APP ,则使用 index 。
如果 APP 是一个文件夹,则使用 APP/index 。
假设:

  • 你的 Reach 程序命名为 APP.rsh 。
  • 你正在使用 JavaScript 后端,并且你的前端命名为 APP.mjs 。假设后端定位于 build/APP.main.mjs ,并且只依赖 Reach 标准库。

然后:

  • 用 Reach 编译你的程序。
  • 创建一个命名为 reachsh/reach-app-APP:latest 并依赖 Reach JavaScript 标准库的 Docker 镜像。
  • 执行这个镜像,连接一个私有以太坊测试链。

reach run 支持以下选项:

  • 环境变量 REACHCONNECTOR_MODE 标示正在运行的场景。如果这个变量没有设置或者为空,则默认为 [ETH-test-dockerized-geth](https://docs.reach.sh/ref-usage.html#%28conmode..E.T.H-test-dockerized-geth%29) 。选项是:
    • ETH-Live ,使用由环境变量 ETH_NODE_URI 指定的以太坊实时网络节点。
    • ETH-browser ,通过浏览器扩展程序(例如 MetaMask )使用以太坊。
    • ETH-test-dockerized-geth ,使用容器化的私有以太坊网络。
    • ALGO-live ,使用 Algorand 网络实时节点,由 Algorand 连接器部分中记录的环境变量指定。
    • ALGO-browser ,通过浏览器扩展程序(例如 AlgoSigner )使用 Algorand 。
    • ALGO-test-dockerized-algod ,使用容器化的私有 Algorand 网络。
  • 环境变量 REACH_DEBUG ,如果设置任何不为空的值,则启用 Reach 标准库中的调试消息,该消息将显示在控制台中。

reach run 可以通过某些文件的存在来进行配置。当缺少这些文件时,reach run 会基于 reach scaffold 采取默认行为。

  • 如果 Makefile 存在,并且环境变量 REACH_CONNECTOR_MODE 和 RUNFROM_REACH 没有设置或者为空,则会在环境变量 [RUN_FROM_REACH](https://docs.reach.sh/ref-usage.html#%28env..R.U.N.F.R.O.M.R.E.A.C.H%29) 设置为true 的时候调用 make run 。
  • 如果 Makefile ,Dockerfile, package.json 和 docker-compose.yml 都存在,那么这些文件都会被使用。你可以调用 reach scaffold 来保留这些文件的默认版本。
  • 如果只有一部分文件存在,reach run 将会报告错误。请删除他们,或者添加缺少的文件。

此外,如果所有的脚手架文件都存在,请特别注意你编写的 Makefile 文件,因为 reach 将会用特定的方式使用它。请参考 reach scaffold 生成的 Makefile 文件,以了解如何正确地编写。

  • 各种 reach 命令都可能会调用 make build,为你的 app 创建 Docker 镜像。
  • reach run … 将会调用 make run-target ARGS = “…” , “…’ 是 reach run 的命令行 args 的转义,以空格分隔的形式显示。关于 reach run 命令行参数调用的示例,请参考 examples/argz/Makefile

5.2.4 reach down

你可以执行以下命令来暂停由 reach run 启动的 docker 容器:
$ reach down


5.2.5 reach scaffold

你可以执行以下命令来创建一个简单的 Reach app 的模板文件 package.json, Dockerfile, docker-compose.yml 和 Makefile:
$ reach scaffold
这些创建的文件与 reach run 临时使用的文件相同。


5.2.6 reach react

你可以执行以下命令来运行一个简单的 Reach app :
$ reach react
假设:

  • 你的 Reach 程序命名为 index.rsh 。
  • 你的前端 React 程序命名为 index.js 。

然后:

  • 使用 Reach 编译程序
  • 基于 REACH_CONNECTOR_MODE 运行合适的测试链。
  • 将当前目录挂载到 reachsh/react-runner Docker 镜像中的 /app/ 中并运行它。

reach react 支持以下选项:

  • —use-existing-devnet —— 不启动新的测试链,但是假设 reach 测试链已经开始运行并连接。
  • 环境变量 REACH_CONNECTOR_MODE 指定了正在运行的场景。默认地,如果这个变量没有设置或者为空,则为 ETH 。选项有:
    • ETH ,运行一个可能会使用的容器化的私有以太坊网络。 app 可以使用任何以太网网络。
    • ALGO ,运行运行一个可能会使用的容器化的私有 Algorand 网络。(支持使用即将推出的带有 TEAL 3 的任何 Algorand 网络。)
  • 环境变量 REACH_DEBUG ,如果设置为任何不为空的值,可以启用 Reach 标准库的调试信息,调试信息会出现在浏览器控制台。

reach react 不兼容与 reach run 相同的脚手架文件。如果你想要一个更加自定义化的基于浏览器的项目,我们建议你直接使用 reach compile ,并为项目使用首选设置。编译的 build/index.main.mjs JavaScript 文件和 ‘@reach-sh/stdlib’ JavaScript 库可以分别用于任何 JavaScript 项目,就像其他 JavaScript 文件和库。


5.2.7 reach devnet

你可以执行以下命令来运行一个私有的 Reach 测试链:
$ reach devnet
reach devnet 支持以下选项:

  • 环境变量 REACH_CONNECTOR_MODE 指定了正在运行的场景。默认地,如果这个变量没有设置或者为空,则为 ETH 。选项有:
    • ETH ,它在 localhost:8545 上运行以太坊测试链。
    • ALGO ,在 localhost:4180 上运行 Algorand 测试链,和在 localhost:8980 上运行 Algorand 索引器。
  • 环境变量 REACH_DEBUG 为 Algorand 网络启用一些额外的调试信息,可通过 http://localhost:9392 访问。

5.2.8 reach server

子命令 $ reach server 在 Reach RPC Server 上启动一个实例,它使用和 reach run 相同的选项和默认值。
reach server 支持以下选项:

  • —use-existing-devnet —— 不启动新的测试链,但是假设 reach 测试链已经开始运行并连接。如果 REACH_CONNECTOR_MODE 包含 live 则忽略。
  • 环境变量 REACH_RPC_KEY 用于定义 RPC 服务器密钥。如果未定义,则生成一个随机值。另外,启动时密钥会显示在控制台。
  • 环境变量 REACH_RPC_PORT 用于定义绑定的端口,默认为 3000 。
  • 环境变量 REACH_RPC_TLS_KEY 用于定义 TLS key 文件的路径,文件路径必须在 ./tls 文件夹下。默认为 reach-server.key 。
  • 环境变量 REACH_RPC_TLS_CRT 用于定义 TLS crt 文件的路径,文件路径必须在 ./tls 文件夹下。默认为 reach-server.crt 。
  • 环境变量 REACH_RPC_TLS_PASSPHRASE 用于定义 TLS 密码,默认为 rpc-demo 。

5.2.9 reach upgrade

你可以执行以下命令来升级你的 Reach 安装:
$ reach upgrade
这可能会改变 reach 命令使用的的默认版本。


5.2.10 reach update

你可以执行以下命令来更新你的 Reach 安装使用的 Docker 镜像:
$ reach update
这可能会改变 reach 命令使用的修补程序版本。


5.2.11 reach version

你可以执行以下命令来查看你安装的 Reach 版本:
$ reach version


5.2.12 reach hashes

你可以执行以下命令来查看你正在使用的 Reach Docker 镜像的确切版本:
$ reach hashes
这比 reach version 更精准,但是可读性更差,因为每个哈希值都指向一个通过 git commit 创建的镜像。