必须用 composer archive 打包私有组件库为 artifact 压缩包:先 cd 进包根目录(含 composer.json),再执行 composer archive --format=zip --file=vendor-name-package-name-1.2.0.zip,文件名须为短横线分隔格式,压缩包内顶层直接包含 composer.json 和 src/ 等目录,不可带额外父目录,否则 autoload 失效。

私有组件库怎么打包成 artifact 压缩包?
必须用 composer archive,不能手动 zip。手动打包容易漏文件、路径错乱或带多余父目录,导致 autoload 失效。
- 先
cd进包根目录(即含composer.json的目录),再执行:composer archive --format=zip --file=vendor-name-package-name-1.2.0.zip - 文件名必须是
vendor-name-package-name-version.zip格式(短横线分隔,不是斜杠) - 压缩包内顶层不能有额外目录,应直接包含
composer.json、src/、tests/等——即解压后内容与原包根目录结构一致 - 检查压缩包:运行
unzip -l vendor-name-package-name-1.2.0.zip | head -n 5,确认第一行是composer.json,而非some-repo-name/composer.json
artifact 仓库配置为什么总报 “Package not found”?
根本原因不是路径不对,而是 composer.json 里 require 的版本号和压缩包文件名不匹配,或者 composer.lock 里仍保留线上 dist URL。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
require必须写死版本,如"vendor/name": "1.2.0",不能用^1.2或dev-main -
repositories配置必须放在项目级composer.json顶部,格式为:{"type":"artifact","url":"/absolute/path/to/archives"}(推荐绝对路径) - 确保
composer.lock已存在且由联网环境生成;离线机上不要删它,也不要运行composer update—— 它会触发网络请求 - 运行安装时加
COMPOSER_DISABLE_NETWORK=1,强制跳过所有远程校验:COMPOSER_DISABLE_NETWORK=1 composer install --no-plugins --no-scripts
path 类型仓库适合什么场景?
只适合开发中尚未发布版本的私有组件,比如你正在本地迭代一个 SDK,需要实时改代码并测试。
- 在
composer.json中添加:{"type":"path","url":"./packages/my-sdk"} -
require写法必须是"vendor/name": "dev-main"(分支名要和实际 Git 分支一致) - 装完后
vendor/vendor/name是符号链接(Linux/macOS)或完整复制(Windows),不是压缩包解压 - 注意权限:如果
./packages/my-sdk不可读,或路径被 IDE 重命名过,composer install会直接失败,且不会自动修复已失效的软链 - 别指望它做版本约束——
dev-main就是最新快照,没有语义化版本控制能力
离线安装后 autoload 为啥不生效?
最常被忽略的是压缩包内部结构和 composer.json 的 autoload 字段没对齐。
- 压缩包解压后,
src/目录必须在顶层,且composer.json中"autoload": {"psr-4": {"Vendor\Name\": "src/"}}的路径要能真实映射到该位置 - 运行
composer dump-autoload后检查vendor/autoload.php是否包含对应 namespace 映射;若无,说明 autoload 规则未加载 - 如果用了
path类型,composer dump-autoload必须手动执行一次,因为install不会自动触发 - 别在离线机上运行
composer update—— 它会清掉vendor/并尝试联网重建依赖树,直接失败










