您好,欢迎访问宜昌市隼壹珍商贸有限公司
400 890 5375--no-scripts 并不安全,仅跳过根 composer.json 的 scripts 钩子,无法阻止 autoload 文件执行、插件逻辑、dev 版本代码等风险。
不是。忽略 --no-scripts 只能跳过 composer.json 中定义的 scripts(如 post-install-cmd),但无法阻止以下行为:
autoload 文件中直接执行的代码(比如在 vendor/autoload.php 加载时触发的函数调用)install 阶段通过 composer-plugin 注入的逻辑(插件本身不受 --no-scripts 控制)composer.lock 中未锁定的分支/提交,或使用 dev- 版本时可能拉取未经审计的代码它只影响 composer.json 的 scripts 字段中声明的钩子,且仅限于当前项目根目录下的配置(不递归处理 vendor 内部包的 scripts)。
典型被跳过的钩子包括:
pre-install-cmd 和 post-install-cmd
pre-update-cmd 和 post-update-cmd
post-autoload-dump(常见于 Laravel 的优化命令)注意:--no-scripts 对 require 命令默认不生效,需显式加上该参数:
composer require monolog/monolog --no-scripts
单靠 --no-scripts 不足以保障安装安全,应配合其他约束:
--no-dev:避免安装 require-dev 中的非运行时依赖(它们常含调试、构建类脚本)--ignore-platform-reqs 会绕过 PHP 扩展检查,慎用;更安全的
是提前确认 platform 配置匹配目标环境composer.lock 由可信 CI 流程生成,且未被篡改(可通过 Git 提交历史或签名验证)标准生产部署命令示例:
composer install --no-dev --no-scripts --optimize-autoloader
最直接的方式是加 -v(verbose)观察日志输出:
composer install --no-scripts -v
如果看到类似以下内容,说明仍有脚本在运行:
Executing command (CWD): php artisan clear-compiled
此时要排查原因:
composer update 而非 install?update 默认读取 composer.json,可能触发 post-update-cmd
scripts?检查 COMPOSER_HOME/config.json 或 ~/.composer/config.json
composer/installers)?它的行为独立于 --no-scripts
真正想切断所有自动执行逻辑,唯一可靠方式是:不运行 composer install,改用离线解压 + 手动 autoload 生成(例如用 composer dump-autoload --classmap-authoritative 预生成后分发)。