composer archive命令不存在,执行必报“command 'archive' is not defined”;正确做法是先运行composer install --no-dev --optimize-autoloader,再用git archive或zip手动打包,并确保含composer.lock、排除敏感文件。

archive 命令默认不读 .gitignore,必须显式启用 --ignore
很多人误以为 composer archive 会自动跳过 .gitignore 里的文件,实际它完全无视 Git 配置。不加 --ignore 参数时,所有源码目录下的文件(包括 node_modules/、tests/、.env)都会被打包进去。真正起作用的是 --ignore 开关,它让 Composer 解析并应用 .gitignore 规则。
实操建议:
- 打包前务必加上
--ignore:例如composer archive --format=zip --file=dist.zip --ignore -
--ignore只识别项目根目录下的.gitignore,子目录中的.gitignore不生效 - 若项目没用 Git,或想用自定义规则,可改用
--exclude手动指定路径,比如--exclude="tests/" --exclude=".env"
ignore 规则对资源文件(如 assets/、public/)的处理很“严格”
.gitignore 里常见的 /vendor/ 或 *.log 没问题,但一旦写成 assets/ 或 public/*,就可能误杀本该打包的前端资源。因为 composer archive --ignore 是按行逐条匹配路径,且不支持通配符展开或上下文感知——它把 assets/ 当作从包根开始的绝对路径前缀,而不是 Git 那种基于工作区的相对语义。
常见错误现象:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
assets/js/app.js被意外排除,只因.gitignore含assets/ -
public/index.php缺失,因.gitignore中写了public/*(实际应写public/*.tmp这类精准规则) - 想保留
public/images/但排除public/images/temp/,单靠.gitignore很难安全表达
vendor 目录是否打包取决于 --no-dev 和 --ignore 的组合逻辑
composer archive 默认不打包 vendor/,哪怕你没加 --ignore。但它是否真的跳过,取决于两个独立条件:一是 --no-dev 控制 dev-dependencies 是否安装(不影响打包行为),二是 --ignore 是否启用及 .gitignore 是否包含 /vendor。如果 .gitignore 里没写 /vendor,又没加 --ignore,vendor/ 就会被原样打进 zip —— 这通常不是你想要的。
正确做法:
- 生产打包一律用
--ignore --no-dev组合 - 确认
.gitignore包含/vendor(注意开头的/,避免匹配到myvendor/这类名字) - 不要依赖
composer.json的archive-patterns字段——它只影响composer install时的 vendor 提取,对archive命令无效
打包后校验缺失文件比预设规则更可靠
再小心地写 .gitignore,也容易漏掉新添加的调试文件(如 dump.php)、IDE 临时文件(.idea/)或 CI 生成物(coverage/)。比起反复调整 ignore 规则,更务实的做法是:打完包立刻解压检查,或用 unzip -l dist.zip | grep -E "(test|\.env|\.log)" 快速扫描敏感路径。
容易被忽略的点:
-
composer archive不校验文件权限,Linux 下的chmod +x脚本打进 zip 后在 Windows 解压会丢执行位 -
--format=tar生成的 tar 包默认不压缩,体积比 zip 大得多,别误以为“没报错就是成功” - 如果项目用了
composer config --global archive-format zip,全局设置会覆盖命令行参数,导致--format=tar失效










