Composer archive 命令如何将项目打包? (排除开发依赖)
发布时间 - 2026-01-09 00:00:00 点击率:次composer archive 默认不支持 --no-dev,必须先运行 composer install --no-dev --optimize-autoloader 清理 vendor,再执行 archive;否则会导致 dev 依赖残留、lock 与 vendor 不一致。
composer archive 命令默认不支持排除开发依赖
直接运行 composer archive 会把 vendor/ 下所有已安装的包(包括 require-dev 中的)一起打包进 ZIP,它没有内置的 --no-dev 或类似开关。这是最常被误解的一点——很多人以为它像 install 或 update 那样能控制依赖范围。
正确做法:先清理 vendor,再用 archive 打包
必须分两步走:先确保 ve 里只含生产依赖,再调用
ndor/archive。否则打包结果不可控。
- 运行
composer install --no-dev --optimize-autoloader,强制重装并剔除require-dev包 - 确认
vendor/已精简(可检查vendor/bin/是否还残留 phpunit、phpcs 等工具) - 再执行
composer archive --format=zip --file=myapp.zip
注意:--optimize-autoloader 不是可选,它能生成更小的 autoload_classmap.php,对部署包体积和加载性能都有帮助。
替代方案:用 zip 命令手动打包更可控
如果项目结构复杂(比如含 node_modules、.git、缓存目录),或你想跳过 composer archive 的路径限制(它只打包当前项目根目录及 vendor/),直接用系统命令更灵活:
rm -rf vendor composer install --no-dev --optimize-autoloader zip -r myapp.zip \ . \ -x "*/.git/*" \ -x "*/node_modules/*" \ -x "*/vendor/bin/*" \ -x "phpunit.xml*" \ -x "phpcs.xml*"
这个命令显式排除了常见干扰项,且不会误打包未提交的临时文件。Windows 用户可用 7z 或 PowerShell 的 Compress-Archive 替代。
容易忽略的关键点
composer archive 默认会把 composer.lock 和 composer.json 一起打进 ZIP,但不会验证它们是否与当前 vendor/ 一致——如果你跳过了 install --no-dev 这步,lock 文件里仍记录着 dev 包,而实际 vendor 里没有,部署时可能出错。
真正安全的发布包,必须保证三者同步:composer.json(不含 dev)、composer.lock(由 --no-dev install 生成)、vendor/(仅含 lock 中列出的生产包)。
# php
# js
# git
# json
# node
# composer
# windows
# app
# 工具
# win
# format
# require
# 不支持
# 会把
# 跳过
# 这是
# 如果你
# 都有
# 很多人
# 你想
# 可选
# 不含
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么在Controller之外的地方验证数据
Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控
Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能
如何在万网开始建站?分步指南解析
佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】
微信小程序 input输入框控件详解及实例(多种示例)
如何有效防御Web建站篡改攻击?
如何快速搭建高效WAP手机网站?
Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】
Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
网站制作价目表怎么做,珍爱网婚介费用多少?
微信小程序制作网站有哪些,微信小程序需要做网站吗?
php打包exe后无法访问网络共享_共享权限设置方法【教程】
Android使用GridView实现日历的简单功能
Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧
Python结构化数据采集_字段抽取解析【教程】
如何快速搭建高效香港服务器网站?
网站制作企业,网站的banner和导航栏是指什么?
Laravel Fortify是什么,和Jetstream有什么关系
Laravel如何处理异常和错误?(Handler示例)
Laravel如何编写单元测试和功能测试?(PHPUnit示例)
Laravel如何使用模型观察者?(Observer代码示例)
瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口
EditPlus中的正则表达式实战(5)
微信小程序 wx.uploadFile无法上传解决办法
大连网站制作公司哪家好一点,大连买房网站哪个好?
jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】
黑客入侵网站服务器的常见手法有哪些?
jquery插件bootstrapValidator表单验证详解
什么是JavaScript解构赋值_解构赋值有哪些实用技巧
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
Python文本处理实践_日志清洗解析【指导】
Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验
微信小程序 配置文件详细介绍
Bootstrap CSS布局之列表
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】
Laravel如何实现全文搜索功能?(Scout和Algolia示例)
Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件
Laravel如何与Inertia.js和Vue/React构建现代单页应用
*服务器网站为何频现安全漏洞?
如何基于云服务器快速搭建个人网站?
做企业网站制作流程,企业网站制作基本流程有哪些?
Swift中swift中的switch 语句
详解Android图表 MPAndroidChart折线图
微信小程序 require机制详解及实例代码
如何快速查询网址的建站时间与历史轨迹?
nodejs redis 发布订阅机制封装实现方法及实例代码
Swift中循环语句中的转移语句 break 和 continue

