@expo/ngrok

中文文档
4.1.3发布于 2023/11/17BSD-2-ClauseTypeScriptCommonJS近 30 天下载 378.3万

ngrok 的节点包

中文使用文档
文档目录19 节
  1. 使用量
  2. 本地安装
  3. 全局安装
  4. Auth 托肯语
  5. 连接
  6. 断开连接
  7. 配置
  8. 检查员
  9. API 密码
  10. 代理服务器
  11. 博览会变化
  12. 获取活动进程处理
  13. 使用 @ expo/ngrok- bin来管理 ngrok 二进制
  14. 如何运作
  15. ngrok 二进制更新
  16. 用点头符
  17. 贡献者
  18. 升级到第4版
  19. 类型脚本

无 Tests TypeScript compatible npm npm

alt ngrok.com

使用量

本地安装

用 npm 安装软件包 :

npm install ngrok

然后使用 ngrok.connect() 开始ngrok和打开地道.

const ngrok = require('ngrok');
(async function() {
  const url = await ngrok.connect();
})();

此模块使用 node>=10.19.0 与同步/等待。 用于基于召回的版本 2.3.0 (单位:千美元)。 。 。 .

全局安装

npm install ngrok -g
ngrok http 8080

对于Linux 上的全球安装, 您可能需要运行 sudo npm install --unsafe-perm -g ngrok 应付 性质 npm 邮购脚本.

Auth 托肯语

您可以创建基本的 http- https- tcp 地道 自定义。对于自定义的子域和更多域,您应当通过 在 ngrok.com 注册。一旦您设置了自动调试机,它就会被存储在 ngrok 配置中,并用于所有隧道。 您可以直接设置验证符 :

await ngrok.authtoken(token);

或将认证传给 connect 这样的方法 :

await ngrok.connect({authtoken: token, ...});

连接

有几种方法可以创建隧道 Ngrok使用 connect 方法.

默认, connect 将打开 HTTP 隧道到端口 80

const url = await ngrok.connect(); // https://757c1652.ngrok.io -> http://localhost:80

您可以将端口号码传递到 connect 指定端口:

const url = await ngrok.connect(9090); // https://757c1652.ngrok.io -> http://localhost:9090

或者你可以通过一个选项对象,例如:

const url = await ngrok.connect({proto: 'tcp', addr: 22}); // tcp://0.tcp.ngrok.io:48590
const url = await ngrok.connect(opts);

选项

有很多选择,你可以通过 connect,这里有一些例子:

const url = await ngrok.connect({
  proto: 'http', // http|tcp|tls, defaults to http
  addr: 8080, // port or network address, defaults to 80
  auth: 'user:pwd', // http basic authentication for tunnel
  subdomain: 'alex', // reserved tunnel name https://alex.ngrok.io
  authtoken: '12345', // your authtoken from ngrok.com
  region: 'us', // one of ngrok regions (us, eu, au, ap, sa, jp, in), defaults to us
  configPath: '~/git/project/ngrok.yml', // custom path for ngrok config file
  binPath: path => path.replace('app.asar', 'app.asar.unpacked'), // custom binary path, eg for prod in electron
  onStatusChange: status => {}, // 'closed' - connection is lost, 'connected' - reconnected
  onLogEvent: data => {}, // returns stdout messages from ngrok process
});

见 所有隧道定义选项的 ngrok 文档 包括: name, inspect, host_header, bind_tls, hostname, crt, key, client_cas, remote_addr。 。 。 .

关于区域的说明:第一隧道所使用的区域将用于以下所有隧道.

断开连接

Ngrok进程和所有地道将在节点进程完成后被杀死. 为了手动阻止地道:

await ngrok.disconnect(url); // stops one
await ngrok.disconnect(); // stops all
await ngrok.kill(); // kills ngrok process

HTTP地道上的注释:默认绑定 tls是真实的,所以每当使用HTTP原型两条地道时都会被创建出-HTTP和HTTP. 如果断开HTTPS隧道,HTTP隧道仍然开放. 您可能想要通过 HTTP 版本 URL 来关闭它们, 或者简单地将全部断开 ngrok.disconnect()。 。 。 .

配置

你可以使用ngrok的 配置文件,然后通过 name 选项。 配置文件允许存储隧道选项 。 Ngrok在这里寻找他们:

OS X	/Users/example/.ngrok2/ngrok.yml
Linux	/home/example/.ngrok2/ngrok.yml
Windows	C:\Users\example\.ngrok2\ngrok.yml

您可以指定自定义 configPath 当做地道.

检查员

当隧道建成后,您可以使用http://127.0.0.1:4040中托管的ngrok接口来检查通过ngrok制作的webhooks.

内部主机为同一 URL 客户端 api。这个软件包暴露了一个API客户端,该客户端将API包裹起来,您可以自己管理地道.

const url = await ngrok.connect();
const api = ngrok.getApi();
const tunnels = await api.listTunnels();

您也可以获取内部 API 的 URL :

const url = await ngrok.connect();
const apiUrl = ngrok.getUrl();

API 密码

API 包装器可以访问所有 ngrok 客户端 API 方法:

const url = await ngrok.connect();
const api = ngrok.getApi();

列出隧道

const tunnels = await api.listTunnels();

开始隧道

const tunnel = await api.startTunnel(opts);

获取隧道细节

const tunnel = await api.tunnelDetail(tunnelName);

停止隧道

await api.stopTunnel(tunnelName);

名单请求

await api.listRequests(options);

重放请求

await api.replayRequest(requestId, tunnelName);

删除所有请求

await api.deleteAllRequests();

请求细节

const request = await api.requestDetail(requestId);

代理服务器

  • 如果你是公司代理的幕后黑手 有问题安装ngrok,你可以设定 HTTPS_PROXY {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}我们来修理它 ngrok的后置脚本使用 got 模块以获取二进制和 hpagent 模块支持 HTTPS 代理。 您需要安装 hpagent 作为依赖的模块
  • 如果您正在使用 CA 文件, 请在环境变量中设置路径 NGROK_ROOT_CA_PATH。在邮站脚本中下载 ngrok 二进制需要路径

博览会变化

获取活动进程处理

给产卵的ngrok工艺使用一个把手

ngrok.getActiveProcess(); // returns ChildProcess

使用 @ expo/ngrok- bin来管理 ngrok 二进制

版本二进制的好处 。 这个 binPath 选项不支持.

如何运作

npm install 从正式的 ngrok 主机下载您平台的 ngrok 二进制 。 自己设置二进制 NGROK_CDN_URL 安装 ngrok 之前的环境变量 。 强制特定平台 NGROK_ARCH,例如: NGROK_ARCH=freebsdia32。 。 。 .

第一次创建地道时, ngrok 进程会产出并运行到断开或母进程被杀死时. 所有进一步的地道都通过通常在http://127.0.0.1:4040上运行的内部ngrok API连接或断开.

ngrok 二进制更新

如果您想从您的软件直接强制更新 ngrok 二进制, 您可以要求 ngrok/download 模块并调用 downloadNgrok 直接函数 :

const downloadNgrok = require('ngrok/download');
downloadNgrok(myCallbackFunc, { ignoreCache: true });

用点头符

如果您想要在更改时重新启动您的应用程序, 您可以使用 节点恶魔。此博客文章显示 如何使用 nodemon 和 ngrok 一起使用 这样您的服务器会重新启动, 但您的隧道不会。 。 。 .

贡献者

请跑 git update-index --assume-unchanged bin/ngrok 不覆盖 ngrok 树枝 在你的公关。 不幸的是,它不能被赋予.

测试套房包括没有认证的基本用途,以及免费和付费认证的功能。 作为环境变量,您可以提供自己的符号,否则会给出警告并忽略某些规格(局部和在PR构建中). GitHub Actions 向主分支提供真实的代号,并运行所有规格 .

升级到第4版

更新软件包的主要动力是消除对已贬值软件的依赖 request 模块. request 改为: got。主要呼吁 ngrok 函数, connect, (中文(简体) ), authtoken, (中文(简体) ), disconnect, (中文(简体) ), kill, (中文(简体) ), getVersion 财务报告和审定财务报表 getUrl 回应与第3版相同.

更新了HTTP库,意味着被包裹的API会改变,因此创建了一个客户端类,其中包含了可用API调用的方法. 见上文文件 如何使用 API 客户端。 。 。 .

反之在于你不再需要知道你需要的API方法的路径了. 例如,要在第三版中列出运行中的地道,你会做到:

const api = ngrok.getApi();
const tunnels = await api.get('api/tunnels');

现在你可以打电话给 listTunnels 函数 :

const api = ngrok.getApi();
const tunnels = await api.listTunnels();

类型脚本

从第3版到第4版,捆绑型号也进行了大修. 大多数类型生活在 Ngrok 命名空间,特别是 Ngrok.Options 替换 INgrokOptions。 。 。 .

版本与发布记录

@expo/ngrok 共发布 13 个版本,首次发布于 2017/07/04;过去 12 个月发布了 0 个版本。

版本发布日期距今
4.1.3latest2023/11/172 年前
4.1.22023/11/172 年前
4.1.12023/04/193 年前
4.1.02021/08/045 年前
2.5.02021/06/125 年前
2.4.32018/12/037 年前

关于 @expo/ngrok 的常见问题

@expo/ngrok 是什么?

ngrok 的节点包

如何安装 @expo/ngrok?

在项目目录运行 npm install @expo/ngrok,或使用 pnpm add / yarn add / bun add。

@expo/ngrok 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@expo/ngrok 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@expo/ngrok 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=10.19.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@expo/ngrok 可以商用吗?

@expo/ngrok 使用 BSD-2-Clause 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@expo/ngrok 的下载量有多少?

根据 npm 官方下载统计,@expo/ngrok 在 2026/10/14 – 2026/11/12 这 30 天内被下载 3,783,242 次,日均约 126,108 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@expo/ngrok 还在维护吗?

最新版本 4.1.3 发布于 2023/11/17(2 年前);至今共发布 13 个版本,其中过去 12 个月发布了 0 个;首次发布于 2017/07/04。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。