composer install --no-scripts 是唯一官方支持的跳过所有自定义脚本的方式,它跳过 post-install-cmd、pre-autoload-dump 等全部 scripts 定义,但不影响 autoload.php 生成。

composer install 时跳过 scripts 的正确参数
直接加 --no-scripts 就行,这是唯一可靠、官方支持的方式。它会完全跳过 post-install-cmd、pre-autoload-dump 等所有在 composer.json 的 "scripts" 里定义的命令。
常见错误是用 --skip-scripts —— 这个参数根本不存在,Composer 会报错:Unrecognized option: --skip-scripts。
-
composer install --no-scripts:跳过全部脚本,适合 CI 构建或只想拉依赖不触发钩子的场景 -
composer update --no-scripts:同理,更新时也适用 - 注意:这不会影响自动加载器生成(
autoload.php还是会写),只是不执行自定义脚本
为什么不能靠修改 composer.json 或删 vendor/bin 来绕过
有人试过清空 "scripts" 字段、把值设成空数组,甚至删掉 vendor/bin 下的可执行文件——这些都不靠谱。
原因很实在:Composer 在解析 composer.json 阶段就已读取脚本定义;即使字段为空,逻辑上仍存在“执行点”,某些插件或自定义安装器仍可能触发副作用。而删 vendor/bin 只影响后续调用,对 install 过程中内置的脚本无影响。
- 改配置不如用参数干净,且不会污染本地
composer.json -
--no-scripts是运行时开关,不影响 lock 文件或依赖解析逻辑 - CI/CD 中推荐固定使用该参数,避免因团队成员本地配置差异导致行为不一致
某些脚本被跳过但 autoload 仍失败?检查 post-autoload-dump 是否真被跳过
如果你跳过了脚本,但 composer dump-autoload 报错或自动加载失效,大概率是误以为 --no-scripts 也跳过了 Composer 自身的 autoload 生成逻辑——其实不会。
--no-scripts 只跳用户定义的脚本,不跳 Composer 内置流程(比如生成 vendor/autoload.php)。但如果项目里写了 "post-autoload-dump": "php some-check.php",这部分就会被跳过,而你可能误以为是 autoload 本身出问题。
- 用
composer install --no-scripts -v查看详细输出,确认哪些脚本被跳过、哪些没走 - 如果依赖某个
post-autoload-dump脚本做类映射补全,跳过它后得手动补救(比如单独跑一次那个脚本) - 别指望
--no-autoloader能配合使用——这个参数只控制是否写 autoload 文件,和脚本无关,且极少需要
CI 场景下更安全的组合用法
在 GitHub Actions、GitLab CI 等环境里,光用 --no-scripts 有时还不够稳。因为有些项目会把关键初始化逻辑藏在 post-root-package-install 里,而这个钩子属于 root package,容易被忽略。
稳妥做法是加上 --no-plugins 和 --prefer-dist 一起用:
-
--no-plugins:防止第三方插件偷偷注册自己的脚本钩子 -
--prefer-dist:跳过从 source 构建,减少 git 操作带来的不确定性 - 三者合用:
composer install --no-scripts --no-plugins --prefer-dist
真正麻烦的是那些把数据库迁移、资源发布硬编码进 post-install-cmd 的项目——跳过之后,得在 CI 流水线里显式补上对应步骤,而不是指望 Composer 自动兜底。










