composer 无法全局禁用脚本,只能通过 --no-scripts 参数在具体命令中跳过所有 composer.json 中定义的 scripts 钩子,如 post-install-cmd;该参数不影响插件脚本,后者需通过插件自身配置禁用。

Composer 默认会执行 scripts 中定义的钩子(如 post-install-cmd),但你无法全局“禁止脚本”,只能在具体命令中跳过——关键在于用对参数,而不是改配置或删 composer.json。
使用 --no-scripts 参数跳过所有脚本
这是最直接、最常用的方式。它告诉 Composer 完全忽略 scripts 段里所有钩子,包括 pre-install-cmd、post-update-cmd 等。
适用场景:CI 构建、容器镜像构建、本地快速安装依赖而不想触发前端构建或权限检查等耗时/副作用操作。
-
composer install --no-scripts:跳过post-install-cmd等 -
composer update --no-scripts:跳过pre-update-cmd、post-update-cmd -
composer require foo/bar --no-scripts:跳过所有相关钩子
注意:--no-scripts 不影响插件(如 hirak/prestissimo)本身的行为,只跳过 composer.json 里 scripts 定义的命令。
按需禁用特定脚本类型(不推荐但可行)
Composer 没有内置机制只禁用某个脚本名(比如只跳过 post-autoload-dump),但你可以临时注释或移除对应字段再运行命令——这属于 hack,不是正解。
更稳妥的做法是:把高风险或非必需脚本移到独立命令中,用 composer run-script 显式调用:
"scripts": {
"build": "npm run build",
"post-install-cmd": "@build"
}
→ 改成:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
"scripts": {
"build": "npm run build",
"post-install-cmd": []
}
之后想执行就手动跑 composer run-script build,不执行就完全绕过。
环境变量 COMPOSER_NO_INTERACTION=1 不等于禁用脚本
新手常混淆这点:COMPOSER_NO_INTERACTION=1 或 -n 只是关闭交互式输入(如确认 license、选择版本),它不会跳过脚本执行。
常见错误现象:
- 设置了
COMPOSER_NO_INTERACTION=1,但post-update-cmd仍被执行并失败 - 误以为
--optimize-autoloader会影响脚本执行 —— 它只影响 autoloader 生成,和scripts无关
真正要跳过脚本,必须显式带上 --no-scripts。
插件脚本不受 --no-scripts 控制
某些 Composer 插件(如 phpstan/extension-installer、ocramius/package-versions)会在安装时自动注册自己的钩子,这些钩子不属于 composer.json 的 scripts 字段,因此 --no-scripts 对它们无效。
如果你发现脚本仍被触发,检查 vendor/composer/autoload_plugins.php 或插件文档,必要时通过插件自身配置禁用(例如 package-versions 提供 extra.versioning.enabled 配置项)。
复杂点在于:脚本来源可能是三方插件、根项目、甚至已安装包的 composer.json(如果它们声明了 scripts 并被 Composer 自动合并)。真正想彻底控制,得结合 --no-scripts + 插件配置 + 审查 vendor/composer/installed.json 中的 scripts 合并结果。










