Valet 依赖约定而非配置,需执行 valet install 后确认服务运行、DNS 解析(ping anything.test)及 80 端口空闲;用 park 托管目录级多项目,link 绑定单项目;静态站点需 .valet/serve.html 指定入口;HTTPS 必开,用 valet secure 自动管理。

Valet 不是“配置出来”的,而是“初始化后按约定用起来”的——它压根不依赖 .env 或 Nginx 配置文件手动改写,所有行为由命令驱动、由目录结构和命名约定决定。
valet install 之后必须做的三件事
执行 valet install 只是启动服务,不代表项目能访问。你得立刻确认:
- 运行
valet status,确保输出里有Valet is running;没这句就别往下试 - 执行
ping anything.test,如果返回127.0.0.1才说明 DNS 解析通了;不通就先跑valet domain test(别用.dev或.localhost,Valet 默认只认.test) - 检查 80 端口是否被占用:
lsof -i :80(macOS/Linux)或netstat -ano | findstr :80(Windows + WSL),Apache/Nginx/MAMP 都得关掉
项目怎么“挂”上去:park vs link 的真实区别
valet park 和 valet link 看似都能让项目可访问,但适用场景完全不同:
Laravel Cloud(cloud.laravel.com)。此技能用于处理所有 Laravel Cloud 请求,包括搜索和读取数据。只要任务涉及 Laravel Cloud,即使用此技能。
-
valet park是“目录级托管”:进入你放项目的父目录(比如~/Sites),执行后该目录下**所有子文件夹**都会变成[folder-name].test;适合前端练手、多个小 demo 并存 -
valet link是“项目级绑定”:必须先进入项目根目录(含artisan或index.html),再执行valet link myapp;它会建一个符号链接,并在~/.config/valet/Sites/下生成对应配置;适合 Laravel 项目或需要独立域名的正式开发 - 两者不能混用同一项目:如果已
park过~/Sites/myapp,又进到里面link myapp,Valet 会报错或覆盖,优先以link为准
静态 HTML/CSS 项目打不开?不是 Valet 问题,是默认路由规则
Valet 默认按 PHP 应用逻辑处理请求,对纯静态站点可能跳 404。解决方法很直接:
- 在项目根目录创建
.valet文件夹:mkdir .valet - 在其中新建
serve.html,内容只写一行:index.html(或其他入口文件名) - 不需要重启 Valet,刷新浏览器即可生效
- 注意:
serve.html只影响当前项目;它不会触发 PHP 解析,纯粹是告诉 Valet “把请求直接映射到这个 HTML 文件”
HTTPS 不是选配,是现在就必须开的功能
Service Worker、navigator.geolocation、localStorage 在部分新版 Safari/Chrome 中已拒绝在 HTTP 下运行。启用 HTTPS 只需一步:
- 进项目目录,运行
valet secure(无参数);Valet 会自动生成证书、更新 Nginx 配置、加入系统钥匙串 - 首次执行后,浏览器可能提示“证书不受信任”,点“继续前往”即可;Mac 上还可双击
~/.valet/Certificates/*.crt手动信任 - 若想关掉,用
valet unsecure;但建议全程开着,避免开发后期才发现 API 调不通 - 别试图自己改 Nginx 配置加
ssl_certificate—— Valet 的 HTTPS 是全自动管理的,手动改会被下次valet secure覆盖
真正卡住人的从来不是命令记不住,而是以为 Valet 像传统环境一样要“配路径、改端口、调权限”。它靠的是严格约定:域名后缀固定、项目位置固定、证书生成自动、PHP 版本靠 .valetphprc 文件而非全局设置。越早接受这套约束,越快进入“写代码,不配环境”的状态。

















