composer.json设置symlink为false后Laravel Nova工具开发无法更新如何解决
解决方案
核心冲突为:Vapor部署环境不支持composer路径仓库的软链配置,而本地开发需要软链实现代码修改实时生效,通过差异化配置两套环境即可解决,以下是两种可行方案:
方案1(优先推荐):分环境差异化配置composer
该方案可以同时兼顾本地开发效率和生产部署兼容性,无需额外本地运维操作:
- 恢复项目根目录
composer.json的默认path仓库配置,移除options配置段,本地执行composer install时会默认生成软链,vendor/acme/custom-nova-dashboard会直接指向./nova-components/CustomNovaDashboard源目录,本地代码修改、npm run watch编译结果都会实时生效:
{ "type": "path", "url": "./nova-components/CustomNovaDashboard" }
- 在项目根目录的
.vapor.yml中添加构建前置钩子,部署到Vapor时自动给对应path仓库添加symlink: false配置,适配Vapor无服务器环境:
build: before: - 'jq '' .repositories |= map(if .url == "./nova-components/CustomNovaDashboard" then .options = {"symlink": false} else . end)'' composer.json > composer.tmp && mv composer.tmp composer.json'
*如果Vapor构建环境未预装jq,可替换为sed命令实现相同的配置修改逻辑。
方案2(轻量替代):本地自动同步文件
如果不想调整部署配置,可在本地开发时运行目录同步脚本,监听到源目录改动后自动同步到vendor目录:
- MacOS可通过fswatch实现,先安装工具:
brew install fswatch - 新建同步脚本
sync-nova-tool.sh:
#!/bin/bash SOURCE_DIR="./nova-components/CustomNovaDashboard/" TARGET_DIR="./vendor/acme/custom-nova-dashboard/" fswatch -o "$SOURCE_DIR" | while read -r event; do rsync -av --delete "$SOURCE_DIR" "$TARGET_DIR" done
- 给脚本添加执行权限:
chmod +x sync-nova-tool.sh - 本地开发时后台运行脚本即可实现修改自动同步:
./sync-nova-tool.sh &
内容的提问来源于stack exchange,提问作者Ali Gajani
相关产品推荐
相关产品推荐

