composer install --no-scripts会跳过composer.json中scripts字段定义的所有生命周期钩子,包括post-install-cmd、pre-autoload-dump、post-autoload-dump、pre-package-install等,无论是否为框架自带或自定义;它不跳过插件逻辑,也不影响vendor/autoload.php生成、composer.lock写入及依赖安装。

composer install --no-scripts 会跳过哪些脚本
它跳过 composer.json 的 scripts 字段里定义的所有生命周期钩子,包括:post-install-cmd、pre-autoload-dump、post-autoload-dump、pre-package-install 等,无论它们是 Laravel 自带的、Symfony 注入的,还是你自定义的命令。只要在 scripts 里声明了,就全被拦住。
注意:它不跳插件逻辑(比如 composer/installers 还照常工作),也不影响 Composer 自身行为——vendor/autoload.php 仍会生成,composer.lock 仍会写入,依赖照样下载安装。
什么时候必须加 --no-scripts
CI/CD 构建阶段最典型:Docker 构建时没装 Node.js,但某个包的 post-install-cmd 里写了 npm run build,不加 --no-scripts 就直接报错退出。
- 部署到生产环境,且确认不需要脚本生成的产物(如前端构建文件、缓存清空、密钥生成)
- 调试安装失败时,快速判断是不是脚本本身的问题(先加
--no-scripts跑通,再单独试脚本) - 审计第三方依赖前,防止恶意
post-update-cmd执行任意代码
反例:Laravel 项目用了 php artisan vendor:publish 作为 post-root-package-install,加了 --no-scripts 就不会复制 .env.example,后续启动直接报错。
--no-scripts 和 --no-autoloader 别混用
--no-scripts 只管脚本;--no-autoloader 是另一回事——它会让 vendor/autoload.php 根本不生成,require 'vendor/autoload.php' 直接失败。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
常见翻车组合:composer install --no-scripts --no-autoloader,结果运行时报 Class not found。这不是脚本问题,是自动加载链断了。
如果你只想跳脚本但保留自动加载,只用 --no-scripts 就够了;真要跳 autoload,得有明确理由(比如手动维护加载器),且必须自己补上类加载逻辑。
没法只禁用某一个脚本,除非改 composer.json
Composer 没提供类似 --skip-script=post-install-cmd 的开关。--no-scripts 是全局开关,开就是全关,关就是全开。
想精细控制?只能临时改 composer.json:
- 把想跳过的脚本字段删掉或设为空数组:"post-install-cmd": [](不是 null,否则会被忽略)
- 或用 jq 在 CI 中动态 patch:jq 'del(.scripts."post-install-cmd")' composer.json > tmp.json && mv tmp.json composer.json
但要注意:某些包(如 laravel/framework)靠 post-autoload-dump 生成优化 classmap,禁用后可能性能下降,本地测不出,上线才暴露。

















