Composer create-project –no-install 创建项目但不安装依赖【技巧】

14次阅读

–no-install 仅跳过 composer install,但仍执行 post-create-project-cmd 脚本;若脚本依赖未安装的 vendor(如 php artisan key:generate),会报错;需加 –no-scripts 彻底禁用。

Composer create-project –no-install 创建项目但不安装依赖【技巧】

为什么 composer create-project --no-install 有时根本没用

这个命令看似能跳过依赖安装,实际却常被忽略一个关键点:它只跳过 composer install 阶段,但**仍会执行项目仓库的 post-create-project-cmd 脚本**。如果目标项目的 composer.json 里定义了该脚本(比如自动运行 npm installphp artisan key:generate),这些操作照常发生,甚至可能因缺少 vendor 文件而报错。

常见错误现象:Script php artisan key:generate handling the post-create-project-cmd Event returned with Error code 1

  • 确认目标项目是否含 "post-create-project-cmd" 字段(查看其 composer.json
  • 若需彻底跳过所有脚本,加 --no-scripts 参数:composer create-project --no-install --no-scripts
  • 某些旧版 Composer(–no-install,会静默忽略;建议升级到 2.x 或至少 1.10+

create-project--no-install 和直接 git clone + composer install --no-dev 有什么区别

核心差异在于「项目初始化完整性」:前者会按 composer.json 中的 autoloadscriptsconfig 等字段生成基础结构,并写入 vendor/autoload.php(空文件),后者则完全从零开始。

  • create-project --no-install 会创建 vendor/ 目录和空的 autoload.php,但不会下载任何包
  • 直接 git clonecomposer install --no-dev 会完整解析依赖、生成自动加载映射、执行脚本(除非显式禁用)
  • 如果你只想快速拉下代码结构、后续再统一处理依赖(例如离线环境、CI 分阶段构建),--no-install 更轻量;但若要复现生产环境行为,后者更可控

什么时候必须用 --no-install,而不是删掉 vendor 再装

典型场景是「模板项目初始化」或「CI 构建缓存优化」:你希望保留原始 composer.lock 的约束,但跳过耗时的依赖下载与解压,等后续在特定环境里再执行 install

  • CI 中配合缓存:先 create-project --no-install 拉下代码骨架,再用缓存的 vendor/ 目录覆盖(避免重复下载)
  • 本地开发中想检查 composer.json 是否合法、或测试自定义脚本逻辑,又不想污染当前 vendor
  • 注意:--no-install 不会校验 composer.lockcomposer.json 是否一致;若两者冲突,后续 install 仍会失败

--no-install 后手动 composer install 失败怎么办

最常见原因是 PHP 版本或扩展缺失导致依赖无法解析,而非命令本身问题。Composer 在 create-project 阶段不校验环境兼容性,直到真正 install 才触发。

  • 运行 composer install -v 查看详细报错,重点关注 Your requirements could not be resolved 类提示
  • 检查当前 PHP 版本是否满足 composer.json"php": "^8.1" 这类约束(用 php -v 确认)
  • 确认已启用必要扩展,如 mbstringxmlcurlphp -m | grep -E "(mbstring|xml|curl)"
  • 若项目使用了平台配置(config.platform),确保它与当前环境匹配,否则可能导致依赖解析异常

真正容易被忽略的是:这个命令不是“跳过安装”,而是“推迟安装”——它把校验和下载的时机往后挪了,但所有约束条件一个都不会少。

text=ZqhQzanResources