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 -f,composer archive直接读取文件内容
为什么 ignore-platform-reqs 不影响 archive
这是常见误解:--ignore-platform-reqs 是给 install / update 用的,和打包完全无关。archive 过程不解析 composer.json 中的 platform 或 config.platform,也不会跳过任何 require-dev 包——它只管“文件是否存在+是否被 export-ignore 标记”。
所以:
- 即使你加了
--ignore-platform-reqs,composer 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"
]
}
}
}关键细节:
- 路径以
/开头表示项目根相对路径(/vendor≠vendor/) - 支持 glob(
/.env*有效,/*/.log无效) - 该配置仅被
composer archive读取,不影响 install/update - 如果同时存在
.gitattributes和config.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浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】
网站制作免费,什么网站能看正片电影?

