--no-scripts 仅对 composer install 等触发生命周期事件的命令生效,无法阻止 composer run-script 手动调用或插件注册的钩子;拼写错误(如 --no-script)、误用于 dump-autoload、混淆自定义脚本与生命周期事件均会导致“脚本仍在执行”的假象。

composer install --no-scripts 为什么脚本还在跑
加了 --no-scripts 却发现 post-install-cmd 还是执行了,大概率是命令输错了或用错了场景。它只对 composer install、composer update、composer require 等触发生命周期事件的命令生效;对 composer run-script post-install-cmd 完全无效——后者是手动调用,不受控制。
常见误操作包括:
- 拼成
--no-script(少个s),参数被忽略 - 在
composer dump-autoload后期待跳过post-autoload-dump,但该钩子默认仍会执行(除非也加--no-autoloader) - 把插件注册的钩子(如
phpstan/extension-installer的激活逻辑)当成 scripts 脚本,其实得配--no-plugins
哪些钩子真能被 --no-scripts 拦住
--no-scripts 只拦截 composer.json 的 scripts 字段里、被 Composer 明确识别为生命周期事件的条目。它不是“禁用所有自动行为”,而是精准屏蔽以下命名的钩子:
-
pre-install-cmd和post-install-cmd -
pre-update-cmd和post-update-cmd -
pre-autoload-dump和post-autoload-dump -
post-root-package-install(比如复制.env.example) - 第三方包声明的
post-package-install(Composer 2.2+ 默认支持)
但不会拦:"build": "npm run build" 这类自定义名脚本(没被自动触发)、插件的 activate() 方法、平台检查失败报错(如 ext-mbstring is missing)。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
CI/CD 里加 --no-scripts 后项目启动就报错?查这三处
不是参数错了,是脚本背后干了关键初始化。跳过之后,运行时缺失的东西往往不报错在安装阶段,而是在第一次 require 'vendor/autoload.php' 或执行业务代码时才暴露:
- 某个
post-install-cmd负责生成.env,跳过之后$_ENV为空,config('app.name')直接返回 null -
post-autoload-dump里调了ClassMapGenerator::dump()做性能优化,跳过之后类加载变慢,压测才看出来 -
post-root-package-install里有chmod -R 755 bootstrap/cache,跳过导致php artisan config:cache写失败,但错误日志里只显示 “file_put_contents failed”
--no-scripts 和 --no-autoloader 别乱配
这两个开关作用正交,混用前必须清楚后果:
-
--no-scripts:脚本不跑,vendor/autoload.php照常生成 -
--no-autoloader:跳过 autoload 文件重建,但脚本仍可能执行(比如你写了pre-autoload-dump) - 一起用:
composer install --no-scripts --no-autoloader→vendor/autoload.php可能根本不存在,PHP 运行时直接Fatal error: Class not found
真正需要“离线静默拉取”的场景,建议先本地完整 install 一次,确认 vendor/autoload.php 已存在,再进离线环境跑 --no-scripts;否则得补上 --classmap-authoritative 或提前准备好类映射缓存。










