composer如何在CI中仅当特定路径变更时才运行composer install?(changed-files过滤)
直接靠 composer install 自身没法判断路径变更,得靠 Git 提前筛出是否动了 composer.json 或 composer.lock。CI 脚本里最稳妥的方式是检查这两个文件是否在本次提交中被修改过。
技术博客
直接靠 composer install 自身没法判断路径变更,得靠 Git 提前筛出是否动了 composer.json 或 composer.lock。CI 脚本里最稳妥的方式是检查这两个文件是否在本次提交中被修改过。
因为 composer.lock 是唯一记录「每个包确切版本、dist URL、shasum 校验值」的文件。没有它,composer install 就会退化成 composer update,强行联网解析依赖——哪怕你本地缓存全都有,也会报 Could not fetch https://repo.packagist.org/packages.json。
因为默认情况下,Composer 会把依赖装进项目目录下的 vendor/,看似隔离——但问题出在 composer.lock 和 PHP 的 include_path 或自动加载机制上。多人共用一台开发机时,如果有人手动改过全局 composer.json、或误用 composer global require,再配合不严格的 autoload 配置(比如用了 psr-0 且未限定命名空间前缀),就可能让 A 项目的 vendor/autoload.php 加载到 B 项目的类。
因为默认行为是去 packagist.org 实时拉取包元数据和 ZIP 文件,哪怕 composer.lock 已存在,composer install 仍会尝试连接远程仓库校验签名、检查更新状态——这步一断网就卡住或报 Could not fetch https://repo.packagist.org/packages.json。
因为默认执行 composer dump-autoload 时,Composer 会尝试检查 composer.lock 是否过期——这需要访问 packagist.org。即使你没改依赖,它也会发起 HTTP 请求,离线即报错:Could not fetch packages information, package information was not updated.
离线环境下 composer install 必然失败——它默认要连 Packagist 或私库拉取元数据和 ZIP 包。但你其实不需要网络,只要提前在有网机器上完成两件事:composer install –no-scripts –no-plugins 生成完整 vendor/,再把整个项目(含 vendor/ 和 composer.lock)打包带走。
代码折叠不是开关式功能,它依赖当前文件的语法定义是否包含 foldingStartMarker 和 foldingStopMarker。如果你打开一个 .py 文件却无法折叠函数,大概率是 Sublime 没识别成 Python 语法——右下角状态栏显示的是 “Plain Text” 而非 “Python”。
不是插件没装,而是 Sublime 默认只在光标停在括号上时才高亮匹配项;一旦光标移开,高亮立刻消失。很多人误以为功能坏了,其实是预期行为没对上。
国内默认直连 packagist.org 会超时或被重置,create-project 命令卡在“Installing dependencies”前就失败,错误信息通常是 Connection refused 或 Operation timed out。这不是你本地配置错,是网络策略导致的。
Sublime Text 2/3/4 默认会在关闭最后一个标签页后直接退出程序,不是 bug,是设计如此。如果你习惯多窗口工作流、或常开单文件调试,这个行为会打断节奏。