最稳的离线安装方式是下载独立二进制composer.phar,在联网机验证php版本≥7.2.5且启用phar/json/mbstring扩展后传至离线机并设为命令;项目依赖须用composer install --no-dev --optimize-autoloader生成vendor,仅拷贝vendor和composer.lock,目标机执行composer install --no-dev --ignore-platform-reqs;若跨平台或环境不一致,应打包vendor、composer.lock、composer.json及install.sh脚本统一部署。

离线安装 Composer 本身
离线环境没法直接运行 curl -sS https://getcomposer.org/installer | php,得提前把安装器和依赖全打成包。最稳的方式是:在能联网的机器上下载完整二进制 composer.phar,它不依赖本地 PHP 的 openssl 或 zlib 扩展(只要 PHP 基础运行时有就行)。
- 去 https://www.php.cn/link/594ca739e3609243a6b6a3dd8d871114 手动下载最新版
composer.phar(别用 curl 脚本) - 检查目标离线机 PHP 版本:运行
php -v,确保 ≥ 7.2.5(Composer 2.x 最低要求) - 确认
phar、json、mbstring这三个扩展已启用(php -m | grep -E "phar|json|mbstring"),缺一不可 - 传过去后加个 alias:
alias composer='php /path/to/composer.phar',或直接mv composer.phar /usr/local/bin/composer && chmod +x /usr/local/bin/composer
离线安装项目依赖(vendor 目录怎么拷贝才不翻车)
直接 rsync 或复制 vendor 目录到另一台机器,90% 会出问题——不是路径硬编码就是 autoloader 没重生成。关键不在“拷”,而在“可复现”。
- 必须保证源机和目标机的
composer.json和composer.lock完全一致(包括换行符、空格、注释位置) - 拷贝前先在源机运行
composer install --no-dev --optimize-autoloader,生成优化后的vendor/autoload.php和vendor/composer/autoload_*.php - 只拷
vendor/和composer.lock,别拷composer.json—— 它只是声明,lock 文件才是真实依赖快照 - 目标机执行
composer install --no-dev --ignore-platform-reqs(如果 PHP 版本或扩展不完全匹配,跳过平台检查)
为什么 vendor 目录不能直接跨平台复制
因为 Composer 在生成 autoload 映射时,会把绝对路径写进 vendor/composer/autoload_static.php(尤其 Windows → Linux 或反之)。你看到的错误通常是:Warning: require(/wrong/path/vendor/autoload.php): failed to open stream 或类找不到但文件明明存在。
- Linux/macOS 上
vendor/composer/autoload_static.php里的$vendorDir是相对路径计算出来的,但某些插件(如hirak/prestissimo或旧版composer-plugin-api)可能注入绝对路径 - Windows 下生成的 lock 文件,某些字段(比如
dist.shasum)可能因换行符差异导致校验失败 - PHP 扩展差异(如
ext-intl缺失)会让某些包在 autoload 阶段就报错,但错误堆栈藏在vendor/composer/ClassLoader.php里,不容易一眼定位
更可靠的离线方案:打包 vendor + lock + install 脚本
比裸拷 vendor 更可控的是把整个“可安装态”打包。这不是偷懒,是规避路径、权限、扩展三重不确定性。
- 在源机运行:
composer install --no-dev --optimize-autoloader --no-scripts(禁用 post-install-cmd,防止脚本调外部命令失败) - 打包这四个东西:
vendor/、composer.lock、composer.json、一个简易install.sh:
#!/bin/sh php composer.phar install --no-dev --optimize-autoloader --no-interaction --no-scripts
composer.phar 和 PHP 可执行,运行 sh install.sh 即可验证是否真离线可用platform.config 或 config.platform,必须在目标机 composer.json 里显式保留,否则 install 会按目标机实际环境检测,可能降级版本composer.lock 里 content-hash 是否和 composer.json 实际内容对得上——这个 hash 不对,所有离线操作都白搭。










