文章目录
- 一行命令把本地服务暴露到公网,localtunnel拿下22K Star
- 一条命令就能跑起来
- 这几个场景下尤其顺手
- 安装方式
- 不仅限于命令行
- 架构与服务端
- 小结
一行命令把本地服务暴露到公网,localtunnel拿下22K Star
写完代码想给别人看下效果,或者接入需要回调地址的第三方服务,每个开发者都遇到过。常规做法是部署到有公网 IP 的服务器上,配置域名、安装证书、配好 Nginx 反向代理,这套流程走下来至少半小时。
localtunnel 的作用就是把这个过程压缩成一条命令:把本机端口映射到一个公网地址上,别人通过那个地址就能访问你本机跑的服务。省掉了配路由器端口转发、买云服务器、折腾 DNS 解析这些步骤。
一条命令就能跑起来
使用门槛很低。本地装了 Node.js,一行命令就够:
npx localtunnel --port 8000执行后终端会返回一个类似https://xxxxx.localtunnel.me的公网地址。把这个地址发给同事或客户,对方就能访问你本机 8000 端口上跑的服务。
如果想用一个固定的子域名,方便反复使用:
lt --port 8000 --subdomain myapp只要myapp这个子域名没被别人占用,你的地址就是https://myapp.localtunnel.me,比随机字符串好记。
端口号也可以通过环境变量传入,省去每次敲参数的麻烦:
PORT=3000 lt终端里的本地服务重启后,localtunnel 会自动检测到并重新建立连接,隧道不会断。你在本地改代码、重启服务,外面的人无感知。
这几个场景下尤其顺手
前后端联调:后端在本地跑,前端需要对接真实接口。把本地后端通过 localtunnel 暴露出去,前端直接配公网地址就行,两个人不必在同一个网络环境里。
第三方回调:支付通知、OAuth 登录这类场景,第三方服务需要回调你的地址。开发阶段用 localtunnel 获取一个公网地址,跳过部署环节直接开始调试回调逻辑。
跨设备测试:电脑上开发网页,想在手机上看看实际效果。用 localtunnel 生成一个地址,手机浏览器直接打开,比 DevTools 的设备模拟更接近真实环境。
临时演示:要给客户或同事快速展示一个功能,不用走完整的发布部署流程,启动 localtunnel,发个链接过去,对方打开即看。
安装方式
除了用npx直接运行,也支持其他安装方式:
# 全局安装,之后能用 lt 简写命令npminstall-glocaltunnel# 作为项目开发依赖引入yarnaddlocaltunnel# macOS 上可以用 Homebrewbrewinstalllocaltunnel全局安装后直接用lt命令,比敲localtunnel少打不少字。
不仅限于命令行
localtunnel 提供了编程接口,适合写进自动化脚本或测试流程:
constlocaltunnel=require("localtunnel");(async()=>{consttunnel=awaitlocaltunnel({port:3000});console.log(tunnel.url);// 生成的公网地址tunnel.on("close",()=>{// 隧道关闭后的清理工作});})();返回的 tunnel 实例可以监听request、error、close三种事件。request事件会告诉你每次请求的方法和路径,方便做访问日志。
配置项也覆盖得很全:端口号、子域名、代理服务器地址、本地 HTTPS 隧道、自定义 TLS 证书等。日常会遇到的隧道场景都考虑到了。
架构与服务端
localtunnel 是客户端-服务端架构。官方维护了一个公共服务端,大多数场景直接连它就行。
如果对稳定性、延迟有更高要求,或者公司内部有合规需求,也可以自己在服务器上部署服务端。服务端代码同样开源,部署不复杂。
除了 Node.js 客户端,社区还贡献了 Go、Rust、C# 等语言的客户端实现,方便不同技术栈的团队使用。
小结
localtunnel 解决的是一个具体的问题:让本地运行的服务有一个公网可访问的地址。整个过程不需要部署、不需要配服务器和域名,一行命令就能搞定。
无论是开发调试、对接第三方 API 还是临时演示,这类场景下它都能省去大量时间。GitHub 上 22,275 个 Star 也说明,有同样需求的开发者不在少数。
景下它都能省去大量时间。GitHub 上 22,275 个 Star 也说明,有同样需求的开发者不在少数。
[外链图片转存中…(img-xE3LzmX7-1780486682899)]