composer怎么安装CodeIgniter_composer怎么部署CI框架【进阶】

0次阅读

CI 3.x 不支持 Composer 安装框架本身,需手动下载;CI 4.x 必须用 composer create-project codeigniter4/appstarter 初始化,require 无效,入口必须是 public/index.php,.env 和 public/index.php 不会被 composer install/update 覆盖。

composer 怎么安装 CodeIgniter_composer 怎么部署 CI 框架【进阶】

composer install 时提示“package not found”或“no matching package found”

CodeIgniter 官方从 4.x 开始才正式支持 Composer 原生安装,CI 3.x 不是 Composer 原生项目,composer require codeigniter/framework 会失败——因为 Packagist 上根本没有这个包。CI 4.x 才有 codeigniter4/framework

  • CI 3.x:必须用下载 ZIP 或 Git 克隆方式部署,composer install 仅用于安装其可选依赖(如 paragonie/random_compat),不是框架本身
  • CI 4.x:运行 composer create-project codeigniter4/appstarter project-name 是唯一推荐的初始化方式;直接 composer require codeigniter4/framework 会出错,因为它不能被“require”进已有项目(缺少 autoloader 配置和核心引导结构)
  • 常见误操作:在空目录下执行 composer initrequire,结果得到一个没入口、没 public/index.php、无法响应 HTTP 请求的“半截框架”

CI 4.x 的 vendor/autoload.php 为什么不能直接 require 到 index.php?

CI 4.x 的启动流程强依赖 app/Config/Autoload.phpsystem/bootstrap.php,它不靠 Composer 的自动加载兜底整个框架逻辑。硬塞 require __DIR__.'/vendor/autoload.php'; 进去,会导致 ServicesEventsConfig 等核心服务未初始化就报错,比如 Call to undefined function CodeIgniterconfig()

  • 正确入口永远是 public/index.php,它内部已包含完整 bootstrap 流程
  • 如果你在 CLI 下写脚本想复用 CI 4 的类,应该用 php spark 命令或继承 CodeIgniterCLIBaseCommand,而不是手动引入 autoload
  • 修改 composer.jsonautoload 字段只影响你自己的类,不影响框架行为;加了 "psr-4": {"App": "app/"} 没问题,但别动 "files" 或试图覆盖 system/

部署到生产环境时,为什么 vendor 目录体积大且部分文件冗余?

composer install --no-dev 能删掉 phpunitfakerphp/faker 这类开发依赖,但 CI 4.x 的 system/ 核心代码不在 vendor 里——它被 appstarter 作为骨架复制进项目了。真正藏坑的是 vendor/codeigniter4/framework 这个包本身:它只是个“占位符”,实际框架代码由 appstarter 提供,所以你看到的 vendor 里那个 framework 包几乎为空。

  • 不要手动删 vendor/codeigniter4/framework,否则 spark 命令会找不到命令定义
  • CI 4.4+ 默认启用 opcache.preload 支持,但 preload 脚本需显式列出所有要预加载的文件,vendor/autoload.php 不够用;得用 spark optimize:preload 生成
  • Git 部署时记得把 .env 加入 .gitignore,但 app/Config/ 下的默认配置(如 App.php)必须提交——它们不是敏感信息,而是框架运行必需的骨架

怎么让 CI 4.x 的 composer 自动更新后不覆盖 public/index.php 或 .env?

答案是它根本不会覆盖——composer update 只改 vendor/composer.lockpublic/index.php 是项目骨架的一部分,由 appstarter 初始化时写入,后续 Composer 操作完全不碰它。真正危险的是人手贱执行 composer create-project …… --force 覆盖整个目录,或者用错误的 Git 工作流把本地 .env 提交到了仓库。

  • .env 必须由运维在部署时生成或注入,CI/CD 流水线里用 echo "APP_ENV = production" > .env 类似操作,而不是从模板复制
  • 如果用了 composer install --no-interaction,确保 COMPOSER_NO_INTERACTION=1 环境变量已设,否则某些插件可能卡住等待输入
  • 升级 CI 小版本(如 4.4.3 → 4.4.4)时,检查 appstarter 的 CHANGELOG,有时它会带新 public/index.php 补丁——这时需要人工比对并合并改动,不是 Composer 自动处理的
事情说清了就结束

星耀云
版权声明:本站原创文章,由 星耀云 2026-03-15发表,共计2143字。
转载说明:转载本网站任何内容,请按照转载方式正确书写本站原文地址。本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。
text=ZqhQzanResources