Composer archive排除文件 忽略特定文件打包技巧【进阶】

发布时间 - 2026-01-25 00:00:00    点击率:
composer archive 默认仅依据 .gitignore 和 .gitattributes 过滤文件,不识别 .dockerignore、autoload.exclude 等;推荐用 .gitattributes 精确控制,或 Composer 2.2+ 的 config.archive.excludes 配置。

composer archive 命令默认打包哪

些文件

composer archive 不是 Composer 的核心命令,它来自 composer/composer 自带的归档功能(实际由 Composer\Command\ArchiveCommand 实现),但默认行为非常简单粗暴:只按 .gitignore.gitattributes 过滤,不读 .dockerignore、不认 exclude-from-classmap、也不管 autoload.exclude

这意味着:

  • 如果你没配 .gitignore,它会把 vendor/tests/phpunit.xml 全塞进去
  • 如果你用的是 SVN 或没有版本控制,composer archive 会直接打包整个目录(包括 node_modules

用 .gitattributes 精确控制 archive 排除项

这是最可靠、最被 composer archive 原生支持的方式。它优先级高于 .gitignore,且明确用于归档过滤。

在项目根目录创建或编辑 .gitattributes,写入:

vendor/ export-ignore
tests/ export-ignore
phpunit.xml export-ignore
.dockerignore export-ignore
*.md export-ignore

注意点:

  • 每行一个路径模式,结尾必须加 export-ignore(不是 export-ignore 的其他值会被忽略)
  • 路径是相对于项目根的,不支持通配符如 */cache/,只支持前缀匹配(cache/ 可以,/cache/ 不行)
  • .gitattributes 本身不会被打包(Composer 内部硬编码排除了它)
  • 修改后无需 git add -fcomposer archive 直接读取文件内容

为什么 ignore-platform-reqs 不影响 archive

这是常见误解:--ignore-platform-reqs 是给 install / update 用的,和打包完全无关。archive 过程不解析 composer.json 中的 platformconfig.platform,也不会跳过任何 require-dev 包——它只管“文件是否存在+是否被 export-ignore 标记”。

所以:

  • 即使你加了 --ignore-platform-reqscomposer archive 仍会把 vendor/ 下所有已安装的包源码(含 dev 包)全打进去(如果没被 .gitattributes 排除)
  • 若你真想排除 vendor/,唯一办法就是用 .gitattributes 显式声明 vendor/ export-ignore
  • 想只打包源码不带依赖?那 composer archive 不是合适工具,应改用 git archive 或自定义 tar 命令

替代方案:用 composer config archive.excludes 更灵活

从 Composer 2.2+ 开始,支持在 composer.json 里声明归档排除规则(比 .gitattributes 更直观,且不依赖 Git):

{
    "config": {
        "archive": {
            "excludes": [
                "/vendor",
                "/tests",
                "/.env*",
                "/phpstan.neon"
            ]
        }
    }
}

关键细节:

  • 路径以 / 开头表示项目根相对路径(/vendorvendor/
  • 支持 glob(/.env* 有效,/*/.log 无效)
  • 该配置仅被 composer archive 读取,不影响 install/update
  • 如果同时存在 .gitattributesconfig.archive.excludes,两者叠加生效(不是覆盖)
  • 注意斜杠方向:Windows 用户也必须用 /,Composer 会自动转换

真正容易被忽略的是:这个配置只在本地运行 composer archive 时起作用;CI 环境若用的是旧版 Composer(composer --version 校验。


# php  # js  # git  # json  # node  # docker  # composer  # windows  # 编码  # 工具  # win  # 为什么  # require  # xml  # svn  # 的是  # 这是  # 会把  # 自定义  # 不支持  # 你没  # 只在  # 自带  # 真想  # 不带 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】  Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明  Linux系统命令中tree命令详解  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理  Windows Hello人脸识别突然无法使用  如何在IIS中新建站点并配置端口与IP地址?  Linux系统运维自动化项目教程_Ansible批量管理实战  如何在Windows环境下新建FTP站点并设置权限?  如何用免费手机建站系统零基础打造专业网站?  潮流网站制作头像软件下载,适合母子的网名有哪些?  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  Laravel Docker环境搭建教程_Laravel Sail使用指南  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  如何为不同团队 ID 动态生成多个独立按钮  bing浏览器学术搜索入口_bing学术文献检索地址  原生JS获取元素集合的子元素宽度实例  如何快速搭建高效香港服务器网站?  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  如何在万网自助建站平台快速创建网站?  jQuery 常见小例汇总  Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  EditPlus中的正则表达式 实战(2)  详解jQuery中的事件  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  如何快速辨别茅台真假?关键步骤解析  微信h5制作网站有哪些,免费微信H5页面制作工具?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  如何在搬瓦工VPS快速搭建网站?  HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】  Laravel如何实现一对一模型关联?(Eloquent示例)  Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】  linux写shell需要注意的问题(必看)  Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】  Laravel如何处理CORS跨域请求?(配置示例)  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤  想要更高端的建设网站,这些原则一定要坚持!  无锡营销型网站制作公司,无锡网选车牌流程?  零基础网站服务器架设实战:轻量应用与域名解析配置指南  如何基于云服务器快速搭建网站及云盘系统?  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  网站制作免费,什么网站能看正片电影?