背景
当我们使用 shopify app dev
启动本地 App 应用时,Shopify CLI 会默认创建一个可以让外网访问你本地服务的网址,是基于 Cloudflare 服务,以此实现内网穿透效果。
国内的网络访问 Cloudflare 服务经常会被屏蔽,或是速度很慢,很影响开发效率,好在 Shopify CLI 支持通过 shopify app dev --tunnel-url <value>
的设置来自定义内网穿透的隧道地址。通过这种方式,可以让本地的服务配置为自定义的 URL 访问,一定程度上可以保证在开发过程中,预览 APP 页面时网络的稳定。
目录
- 准备工作
- 配置说明
- 效果展示
准备工作
如果你本身网络环境比较稳定,而且没有额外的特殊需求,默认使用 Shopify 自身提供的 Cloudflare 服务,也是没有问题的,因此本文的配置并非是开发 Shopify APP 的必选项。
如果你可以获取到 ngrok 官网的服务,强烈建议使用 ngrok 官网的服务。
接下来我演示的部分,主要针对国内的类似 ngrok 的服务,且仅考虑使用其免费服务。国内服务的一些问题:
- 会涉及1元左右的实名认证费用
- 因为免费服务使用的人数较多,因此会存在服务不稳定的情况
本文主要介绍本人使用的两种内网穿透服务(非广告),感兴趣的同学可以尝试。
配置说明
shopify app dev --tunnel-url <value>
参数说明:- value 中的参数,必须是 https 的域名,以及端口号
- 示例:`shopify app dev --tunnel-url shopify app dev --tunnel-url yoursite.com:443
- 注意点:必须得是 https 协议,必须加端口号,即使是 https 的默认端口,也需要加上 443
- Shopify App 本地服务端口设置
- 在项目中找到
shopify.web.toml
文件,加入port=8080
或你自己期望的端口号 - 修改后的示例:
name = "remix" roles = ["frontend", "backend"] webhooks_path = "/webhooks" port = 8080 [commands] predev = "npx prisma generate" dev = "npx prisma migrate deploy && npm exec remix vite:dev"
- 设置 port 的原因是,
shopify app dev
在启动时,会获取随机的端口号,如果不设置的话,当我们配置内网穿透时,无法确定应该转发的端口号。
- 在项目中找到
- 不做配置时,
shopify app dev
默认的地址和端口如下:- 为了能够看出设置后的效果,可以在
vite.config.ts
中添加 log 函数打印日志 - 效果如下:
- 为了验证随机性,你可以重新启动本地服务,对比下域名和端口号
- 为了能够看出设置后的效果,可以在
效果展示
方案一
- 网站:www.ngrok.cc/
- 方案特点:
- 需要1元的实名认证费用
- 可以选择免费的美国服务
- https 服务
- 可以不用设置证书,使用系统默认的证书
- 可以不用备案域名
- 可以默认设置一个自定义域名前缀
- 免费服务用的人多,因此可能会遇到服务不稳定的情况
- 本地启动:
-
shopify app dev --tunnel-url https://系统生成的隧道域名.com:4443
-
首次启动时,请直接访问上面配置的 https 域名+端口号,因为系统默认的 SSL 证书不被浏览器识别,直接预览可能无法正常显示。
-
启动后的域名输出:
-
页面渲染后的效果:
-
- 至此,我们完成了本地开发配置自定义域名的第一种方案。
方案二
- 网站:www.natfrp.com/
- 方案特点:
- 需要1元的实名认证费用
- 免费的服务相对稳定
- https 服务
- 需要拥有一个备案的域名,以及有效的 SSL 证书
- 请确保你已经按照 natfrp 的 https 文档要求做好了相关配置,尤其是以下两部分:
- 域名的解析配置
- SSL 证书的配置
- 本地启动:
-
shopify app dev --tunnel-url https://备案成功的域名.com:443
-
启动后的域名输出:
-
页面渲染后的效果:
-
- 至此,我们完成了本地开发配置自定义域名的第二种方案。
杂谈
- 在本地开发时配置自定义域名并非必选项,此处简单总结了下自定义域名和默认域名对比,方便大家开发时做取舍:
- URL 的稳定性:
- 默认域名是随机的,每次启动可能不同
- 自定义域名可以保持稳定,避免频繁更改 Shopify 应用设置
- 开发效率:
- 默认域名更适合临时测试,快速调试,但每次更改域名需要重新配置
- 自定义域名更适合长期开发和测试,不需要频繁更改配置
- 适用场景:
- 默认域名适合短期调试,小型项目或临时开发环境
- 自定义域名适合复杂的开发项目,特别是需要调试 Webhooks、OAuth 回调等场景,且不想每次启动时更改 URL
- URL 的稳定性:
- 本文没有详细的说明本人选择的两种方案的配置步骤,因为对应项目本身已有比较完善的文档,因此没有必要多此一举,当大家遇到问题时,建议多读文档。
- 再分享一个开发中的经验:本地开发 Shopify App 时,不建议设置浏览器开发者模式的
Disabled Cache
,因为每次改动代码热更新时,都需要将很多静态资源转发到公网,因此热更新的加载速度是正常的网络请求,而不是本地请求。 - 值得注意的是,采用国内的内网穿透服务,但因为实际的网络问题,在调试 Webhooks 等服务时,可能仍然无法正常访问,这也是为何本人优先建议使用 ngrok 的原因。
参考文档
- Shopify CLI 命令,app dev 相关说明:shopify.dev/docs/api/sh…
浏览知识共享许可协议
本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。