Mac装Symfony CLI提示command not found,因shell初始化未生效或PATH未包含~/.symfony/bin;需确认shell类型(zsh/bash),将export PATH="$HOME/.symfony/bin:$PATH"写入对应配置文件并source重载。

Mac 上装 Symfony CLI 为什么老提示 command not found
装完 symfony-cli 后执行 symfony 报错,大概率是 shell 初始化没生效,或者安装路径没进 $PATH。
- Mac 默认用 zsh,但部分用户仍用 bash,确认当前 shell:运行
echo $SHELL - 官方安装脚本默认写入
~/.zshrc,如果你用 bash,得手动把export PATH="$HOME/.symfony/bin:$PATH"加到~/.bash_profile - 改完配置别忘了重载:
source ~/.zshrc(或对应文件),否则新终端才生效 - 验证是否在 PATH 中:
which symfony应该返回/Users/xxx/.symfony/bin/symfony
Windows WSL2 跑 Symfony 项目时 PHP 找不到 ext-intl
WSL2 默认不带完整 PHP 扩展,symfony server:start 启动时报 Class 'IntlDateFormatter' not found 就是这个原因。
- 先确认 PHP 版本和扩展路径:
php -i | grep "extension_dir" - 装 intl 扩展:
sudo apt update && sudo apt install php-intl(Ubuntu/Debian) - 如果用的是自编译 PHP 或第三方源(如 ondrej),可能需要额外启用:
sudo phpenmod intl - 注意 WSL2 和 Windows 主机时间不同步会导致
symfony serve启动失败,运行sudo hwclock -s同步一次
Linux 容器里跑 symfony new 提示 Could not find package
不是网络问题,也不是权限问题,而是 Composer 缓存或镜像源在容器内失效了。
- 容器启动时没挂载 Composer 缓存目录,每次都是全新环境,建议挂载:
-v $HOME/.composer/cache:/root/.composer/cache - 国内环境默认走 packagist.org,容易超时,进容器后先切镜像:
composer config -g repo.packagist composer https://packagist.phpcomposer.com -
symfony new底层调用 Composer,如果容器里没设COMPOSER_HOME,它会试图写入/root,而某些最小化镜像(如 alpine)的 /root 不可写,加个-e COMPOSER_HOME=/tmp/composer更稳
跨平台共享项目时 symfony.lock 总被 Git 标为修改
这不是 bug,是不同系统换行符(CRLF vs LF)和 JSON 格式化差异导致的。尤其 Windows 用户用 IDE 自动格式化后更明显。
- 统一 Git 换行策略:项目根目录加
.gitattributes,写入symfony.lock text eol=lf - 别让 IDE 自动美化
symfony.lock—— 这文件是机器生成的,人工改没意义,VS Code 可加"[json]": {"editor.formatOnSave": false} - Mac/Linux 用户如果看到锁文件里有
\r\n,说明某次提交是从 Windows 推上来的,用dos2unix symfony.lock清理一次即可
跨平台最麻烦的从来不是安装命令,而是那些“看起来一样、其实不一样”的隐性状态:时区、换行、扩展加载顺序、缓存路径权限。这些地方一松劲,第二天就有人在群里问“为什么我本地能跑,CI 上报错”。










