You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Packagist拉取GitHub发布产物而非Git标签提交

实现Composer直接拉取GitHub Releases构建包的方案

核心思路

修改包的composer.json配置,让Composer安装指定版本时,优先拉取GitHub Releases中包含构建产物的zip包,而非直接克隆Git标签对应的代码提交。

具体步骤

1. 配置Composer的dist字段

在你的包的composer.json中添加dist配置,利用动态占位符匹配GitHub Releases的zip包地址:

{
  "name": "iamntz/carbon-fields-urlpicker",
  "type": "library",
  "dist": {
    "url": "https://github.com/iamntz/carbon-fields-urlpicker/releases/download/{version}/carbon-fields-urlpicker.zip",
    "type": "zip"
  },
  // 保留原有其他配置
}

这里的{version}会被Composer自动替换为用户安装的版本号(比如v1.2.3),前提是你在GitHub Releases上传的zip包命名和版本严格对应。

2. 优化GitHub Actions构建流程

在构建工作流中,完成CSS/JS编译后,打包指定名称的zip文件并自动上传到Release:

- name: 构建静态资源
  run: |
    npm install
    npm run build

- name: 打包产物
  run: zip -r carbon-fields-urlpicker.zip . -x ".git/*" "node_modules/*" ".github/*"

- name: 上传到Release
  uses: actions/upload-release-asset@v1
  env:
    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  with:
    upload_url: ${{ steps.create_release.outputs.upload_url }}
    asset_path: ./carbon-fields-urlpicker.zip
    asset_name: carbon-fields-urlpicker.zip
    asset_content_type: application/zip

3. 同步Packagist与GitHub标签

确保Packagist开启了GitHub标签自动同步,这样每次在GitHub打标签并发布Release后,Packagist会自动更新版本信息,用户执行composer require时就能匹配到对应的zip包。

4. 可选:强制使用dist包

如果想让用户默认安装带构建产物的包,可在composer.json中添加配置:

{
  "config": {
    "preferred-install": "dist"
  }
}

注意事项

  • 版本号必须严格对齐:GitHub标签名要和Releases中zip包引用的{version}完全一致,否则Composer无法正确匹配地址。
  • 测试验证:发布测试版本后,执行composer require iamntz/carbon-fields-urlpicker:@dev,检查Composer是否拉取了Releases的zip包而非Git源码。

内容的提问来源于stack exchange,提问作者Ionuț Staicu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 16:38:19