--no-scripts是跳过composer.json中所有自动触发脚本(如post-install-cmd、pre-update-cmd等)的唯一可靠方式,适用于install、update、require、create-project等命令,但对run-script无效,也不影响插件逻辑或autoload生成。

直接加 --no-scripts 就能跳过 Composer 安装时的所有脚本执行,但别盲目加——它不解决环境缺失、扩展未启用或依赖冲突问题,只拦住 post-install-cmd 这类钩子。
哪些命令支持 --no-scripts?
它不是独立命令,必须跟在主命令后使用。常见组合:
-
composer install --no-scripts:跳过post-install-cmd、post-root-package-install等安装后脚本 -
composer update --no-scripts:跳过pre-update-cmd、post-update-cmd -
composer require foo/bar --no-scripts:同样生效,适用于单包引入 -
composer create-project laravel/laravel --no-scripts:新建项目时不跑初始化脚本
注意:composer run-script xxx 不受该参数影响,它只管自动触发的生命周期事件。
--no-scripts 为什么有时“没生效”?
最常见原因有三个:
- 拼写错误:写成
--no-script(少个s),参数被忽略,脚本照常执行 - 误以为它能跳过插件逻辑:比如
ocramius/package-versions的钩子由插件机制注册,--no-scripts完全不管,得配--no-plugins - 脚本被显式调用:比如 CI 中写了
composer run-script post-install-cmd,这个和--no-scripts无关,照样跑
验证是否生效,加 --verbose 看日志里有没有 Running script post-install-cmd 这类输出。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
CI/CD 中加了 --no-scripts 却启动失败?查这三处
跳过脚本不等于“安全”,很多关键动作藏在里面:
-
post-root-package-install没执行 →.env.example没复制成.env→ 应用读不到配置,报错静默 -
post-autoload-dump被跳过 → Laravel 的优化类映射没生成 → 启动时报Class not found或性能骤降 - 某些包(如
phpstan/extension-installer)把服务注册塞进post-autoload-dump,跳过后运行时直接缺依赖
建议做法:CI 中用 composer install --no-scripts 快速拉依赖,再单独补必要动作,比如 composer dump-autoload -o 或 cp .env.example .env。
要不要同时加 --no-autoloader?
除非你明确知道后续步骤会自己处理 autoload,否则别加。两者区别很关键:
-
--no-scripts:只跳脚本,vendor/autoload.php照常生成 -
--no-autoloader:跳过autoload.php重建,但脚本仍可能运行(除非也加--no-scripts) - 两者都加 →
vendor/autoload.php可能根本不存在,PHP 直接 fatal
真正需要极致静默的构建(比如只打包 vendor 目录),才考虑组合使用;日常部署中,--no-scripts 单独用更安全。
最关键的不是参数怎么加,而是得打开项目根目录的 composer.json,逐条看 scripts 里写了什么——有些脚本只对本地开发有意义,有些却是生产启动的刚性依赖。跳之前,先确认它动了哪些文件、改了哪些配置、是否依赖外部命令。










