新闻中心

如何在不提交vendor目录的情况下部署Composer项目到共享主机?(部署策略)

2025-12-12
浏览次数:
返回列表
应避免直接上传 vendor 目录,而是在本地或 CI 中执行 composer install --no-dev --optimize-autoloader 生成确定依赖,仅上传源码、composer.json 和已提交的 composer.lock;部署时在主机验证 PHP 环境后运行安装命令或上传预构建包。

如何在不提交vendor目录的情况下部署composer项目到共享主机?(部署策略)

直接上传 vendor 目录到共享主机不仅体积大、易出错,还可能因主机环境(PHP版本、扩展、权限)不一致导致运行失败。更稳妥的做法是:在本地或CI环境中完成依赖安装,仅上传源码和锁定文件,再通过轻量方式在主机上补全或验证依赖。

确保 composer.lock 文件已提交

这是整个策略的前提。它锁定了所有包的确切版本和哈希值,让后续安装可重现。没有它,每次部署都可能拉取不同版本,引发兼容性问题。

  • 检查项目根目录下是否存在 composer.lock
  • 若不存在,运行 composer installcomposer update 生成它
  • 确认该文件已加入 Git(未被 .gitignore 忽略)

使用 composer install --no-dev --optimize-autoloader

这是部署时的标准命令。它只安装 require 中的生产依赖(跳过 require-dev),同时生成优化后的自动加载映射,提升性能且减少文件数量。

  • 在共享主机上执行前,需先确认 PHP CLI 可用且版本 ≥ 项目所需最低版本
  • 多数共享主机支持 SSH,可通过终端执行;不支持 SSH 的,可用 PHP 脚本封装该命令(需谨慎权限与超时)
  • 建议在部署前清空旧 vendor 目录,避免残留文件干扰

上传最小必要文件集

除了源码和 composer.lock,只需带上 composer.json 和用于触发安装的简易脚本(可选)。无需上传 vendornode_modules、测试文件等。

微软爱写作 微软爱写作

微软出品的免费英文写作/辅助/批改/评分工具

微软爱写作 130 查看详情 微软爱写作
  • 推荐上传清单:composer.jsoncomposer.lockindex.php(或其他入口)、src/config/ 等业务代码目录
  • 排除:vendor/tests/.git/README.md(非必需)
  • 可用 .gitattributes 或部署脚本定义 clean export 列表

处理共享主机限制的备选方案

部分主机禁用 exec()、禁止写入 vendor/ 或不提供 CLI。此时可在本地构建完整部署包:

  • 在与目标主机相同 PHP 版本的环境中运行 composer install --no-dev --optimize-autoloader
  • 打包 vendor/ 连同源码(但压缩后上传),解压即用
  • composer dump-autoload --classmap-authoritative 进一步减少运行时查找开销
  • 若主机连 ZIP 解压都不支持,可考虑将 vendor/ 打包为 Phar(需主机支持 Phar 扩展)

基本上就这些。核心是把“依赖解析”和“代码部署”拆开——前者在可控环境完成,后者只搬运确定结果。不复杂但容易忽略细节,尤其是 lock 文件和 PHP 环境匹配。

以上就是如何在不提交vendor目录的情况下部署Composer项目到共享主机?(部署策略)的详细内容,更多请关注php中文网其它相关文章!


# js  # seo工作怎么优化  # 株洲网站建设系统哪个好  # 济源微信营销推广  # 黄石灯箱网站建设  # 都不  # 是在  # 内存不足  # 如何使用  # 意大利  # 这是  # 情况下  # 如何在  # 微软  # 上传  # 解压  # composer  # node  # json  # git  # php  # 淄博网站推广工作室  # 开封学校网站建设  # seo当中sem是啥  # 抖音seo企业排名  # 太仓网站建设的费用  # 佛山建材网站seo优化 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 邮政编码查询不到怎么办_邮政编码查询不到的常见原因与对策  零跑汽车11月交付量达70327台 实现连续9个月正增长  火锅吃太多会怎样 火锅吃太多会上火吗  J*a最大堆Heapify方法修复:索引计算与边界条件深度解析  QQ邮箱正确登录入口_QQ邮箱官方网站使用地址  内存检查:在VS Code中调试C++时的内存视图  大象笔记网页版入口 印象笔记网页版登录入口  AI泡沫首次被“刺破”:GPU十年都无法存活!  SteamMachine定价或为699美元 大家想入手吗?  Python中如何避免重复条件判断:利用数据结构实现动态逻辑  css滚动动画效果怎么实现_使用Animate.css滚动触发动画类  如何在Python中使用Optional类型处理可变对象并避免Pylint警告  铁路12306卧铺选择攻略 铁路12306下铺座位预定技巧  126邮箱网页版官方入口 126邮箱账号在线登录平台  如何将HTML表格多行数据保存到Google Sheets  J*a递归快速排序中静态变量的状态管理与陷阱  Win11蓝牙耳机断连怎么解决 Win11蓝牙设置重新配对与驱动更新【技巧】  免费抖音短视频入口_抖音网页版短视频免费通道  抖音网页版快捷访问 抖音网页版网页版入口操作教程  Golang如何实现容器化日志收集与分析_Golang容器日志收集分析方法  我的世界官方游戏入口 我的世界官网平台直达链接  React/Next.js中实现列表项的动态移动与状态管理:兼论唯一键的重要性  Lar*el 递归关系中排除指定分支的教程  树莓派传感器触发:通过Twilio API发送WhatsApp消息教程  必由学官方平台入口 必由学在线课堂登录地址  Win11怎么隐藏桌面图标 Win11一键隐藏所有桌面元素及恢复显示  composer的"require-dev"部分是用来做什么的?  自定义Bag-of-Words实现:处理带负号的词汇权重  随机参数递归函数的基准调用次数与时间复杂度探究  基于动态规划的房屋花卉种植最小成本算法详解  在J*a中如何在J*a中使用异常机制记录错误日志_异常日志实践经验  优化Django表单:提交验证失败后保留用户输入  yandex入口引擎手机版 yandex安卓版下载入口  Win11怎么用U盘重装系统 Win11制作启动盘并重装系统完整教程【详解】  CSS布局中意外空白:解决padding-top导致的顶部间距问题  C#中解析不规范的HTML为XML 常见的坑与解决办法  格力空气能E5故障代码是什么情况_格力空气能E5代码解析与应对措施  iwriter统一登录平台 iwrite账号密码登录页面  深入理解Go语言中Map值与方法接收器的交互:为什么需要临时变量  Tabulator表格中精确实现日期时间排序的指南  C++如何实现单例模式_C++设计模式之线程安全的单例写法  抖音小游戏合成大西瓜免费秒玩入口链接 抖音小游戏热门合集秒玩网站  Win11如何使用Windows Sandbox Win11沙盒功能开启与使用教程【详解】  MAC如何将整个网页截长图_MAC使用Safari的导出为PDF或第三方工具  想当下一个《2077》?《心之眼》Steam评价升至"多半好评"  中兴Axon42Ultra怎样在文件App筛图_iPhone中兴Axon42Ultra文件App筛图【图片筛选】  深入理解rpy2中的类型转换:优化Python对象到R矩阵的映射  Lar*el头像管理:图片缩放与旧文件删除的最佳实践  ArrayList与LinkedList核心操作的Big-O复杂度分析  《马克思佩恩3》早期版本曝光 UI设计曾多次调整! 

搜索