资讯动态

仓颉中心仓制品包发布指南:cjpm bundle 与 publish 全解析

发布时间:2026/10/13 9:50:19 来源:尧图企业网站定制
文档编程语言【免费下载链接】cangjie_docs仓颉编程语言开发者文档。项目地址https://gitcode.com/Cangjie/cangjie_docs点击查看免费下载本文基于仓颉开发者文档仓库cangjie_docs中的中心仓客户端文档系统讲解如何把本地开发的仓颉源码模块通过cjpm打包为符合中心仓格式的制品源码包.cjp并完成cangjie-repo.tomltoken 配置、bundle/publish命令参数、include/exclude打包范围规则与元数据规格等全流程操作。读完本文你可以独立完成一个模块从配置、打包、检查到成功发布到仓颉中心仓Cangjie Central Repository的完整发布链路并理解每一步背后的校验逻辑与通信细节。一、发布前提环境准备与 token 配置cjpm可以将开发的源码模块打包并发布到中心仓。发布前用户必须配置 token 以进行用户认证。中心仓Cangjie Central Repository是仓颉语言的三方库托管平台由三部分组成中心仓官网搜索、浏览制品、管理与组织操作、中心仓客户端集成在cjpm中的上传/使用命令行工具、中心仓仓库存放制品包及元数据详见 概述。cjpm通过配置文件cangjie-repo.toml完成中心仓相关配置其格式如下详见 中心仓客户端配置[repository.cache] path /path/to/repository/cache # 本地存放路径 [repository.home] registry https://pkg.cangjie-lang.cn/registry # 中心仓 url token user-token # 用户个人 token各字段含义repository.cache.path本地缓存路径用于存放从中心仓下载的制品包源码支持绝对/相对路径相对路径以该cangjie-repo.toml为基准留空时Linux/macOS下最终生效路径为$HOME/.cjpmWindows下为%USERPROFILE%\.cjpm。repository.home.registry中心仓仓库地址https://pkg.cangjie-lang.cn/registry用于上传下载通信。repository.home.token用户个人 token在上传制品包时用于用户认证。token 在中心仓官网个人中心 → API Tokens页面新建/刷新/作废即上文配图所示页面。cangjie-repo.toml的查找顺序为模块内与cjpm.toml同级目录 → 用户目录.cjpm/cangjie-repo.toml→ 仓颉 SDK 中tools/config/cangjie-repo.toml默认值找到即停止。二、cjpm.toml中与制品包制作和发布相关的配置项cjpm.toml中与制品包创建和发布相关的字段如下来自 制品包发布文档字段名字段描述是否必填cjc-version仓颉 SDK 最低版本号是name模块名与模块内root包名一致是organization组织名为空则为无组织模块否description描述信息仅打包时必填version模块版本信息是output-type编译输出产物类型取值为静态库/动态库/可执行static/dynamic/executable是authors作者 ID 列表否repository制品代码仓 url否homepage制品主页 url否documentation制品文档页 url否tag制品标签否category官方提供的制品分类否license协议列表取值需遵循 SPDX Identifier 规范否include指定打包范围否exclude指定打包排除范围否dependencies项目依赖格式如aoo 1.0.0或org::boo { version 2.0.0 }否test-dependencies测试依赖格式与dependencies相同否script-dependencies脚本依赖格式与dependencies相同否如下是一个具体的cjpm.toml示例[package] cjc-version 1.0.0 name demo organization cangjie description demo of cangjie central repository version 1.0.0 output-type executable authors [Tom, Joan] repository https://cangjie-demo.git homepage https://cangjie-demo.com documentation https://cangjie-demo.com/docs tag [cangjie, demo] category [Network, UI] license [Apache-2.0] include [src] exclude [*.txt] [dependencies] aoo 1.0.0 [test-dependencies] boo 2.0.0 [script-dependencies] org::coo 3.0.0结合 cjpm 使用手册 可补充以下细节方便配置时一次做对authors、repository、homepage、documentation均用于中心仓网页的制品信息展示最终写入元数据见 元数据规格。tag用于指定制品标签上限 5 个category用于指定制品分类上限 5 个且取值必须在中心仓提供的分类范围内如Network、Utility、Logging、UI等共 26 个分类。配置时大小写不敏感但生成的元数据中会统一转换为标准格式。制品名/组织名的命名规范见 中心仓制品规格由大小写字母、数字和下划线组成长度 [3, 64]必须以字母或若干个下划线开头以下划线开头时第一个非下划线字符必须是字母例如cangjie_demo_1、__Cangjie_Demo_2不能是任何仓颉语法关键字大小写不敏感组织名不能为default。制品版本号格式为主版本号.次版本号.修订版本号三级均为自然数如0.1.2。三、bundle命令制品包打包范围include / excludecjpm提供bundle命令将本地开发的源码模块打包成符合中心仓制品包格式的制品包用于后续上传。bundle的常用可配置项见 cjpm 手册 bundle 章节-V, --verbose展示安装打包日志--skip-test跳过单元测试阶段--skip-lint跳过静态检查阶段。打包范围由include和exclude两个字段决定二者均为字符串数组每个字符串代表一条匹配规则。匹配规则采用gitignore 风格的 glob 语法*、?、**、行首/锚定、行尾/目录匹配等规则相对于项目根目录匹配。配置时优先使用常规写法如src、*.txt、src/**不建议使用./前缀或.//等冗余路径写法。支持的 glob 语法语法含义*匹配除/外的任意字符单路径段内?匹配单个非/字符**匹配任意层级目录[abc]匹配括号内任一字符以/开头仅匹配项目根目录下的路径如/src只匹配根目录src以/结尾匹配该目录及其下所有文件如src/不含/的规则可在任意目录层级匹配如*.txt匹配前规则会先做路径规范化折叠多余的/和/./段、解析..段以./开头的规则会先去掉./前缀。规则./或././表示匹配项目内全部文件。与.gitignore的差异需要注意不支持!否定规则隐藏文件以.开头的文件和目录始终不会被打包部分在.gitignore中无效的规则如./src/**在bundle中可用但建议使用标准写法。bundle只检查并打包当前项目目录下的文件。最终打包范围确定规则无关配置默认会被打包项目根目录下的cjpm.toml、README.md、README_zh.md无关配置默认不会被打包项目根目录下的cjpm.lock和cangjie-repo.toml编译产物目录和构建脚本产物目录所有二进制文件所有隐藏文件以.开头的文件和目录。其余文件遵循匹配任意include规则且不匹配任意exclude规则 → 打包未配置include时 → 打包当前目录下所有不匹配任意exclude规则的文件。以如下待打包模块demo为例demo ├── src │ ├── demo.cj │ ├── demo-config.txt │ └── aoo │ ├── aoo.cj │ └── aoo-config.txt ├── test │ ├── test.cj │ └── test-config.txt ├── README.md └── cjpm.toml不同配置下的打包结果# 示例一include []exclude [] # 结果打包上述文件列表中的所有文件# 示例二include [src]exclude [] # 结果打包 cjpm.toml、README.md 和 src 目录# 示例三include []exclude [*.txt] # 结果排除所有 txt 文件打包其余文件# 示例四include [src]exclude [*.txt] # 结果打包 cjpm.toml、README.md 和 src 目录中除 txt 文件以外的其他文件四、bundle打包流程从模块检查到产出.cjpbundle的完整打包流程分四步任一步骤失败都会导致打包失败模块检查。一个可以被成功打包的cjpm模块需满足模块名、组织名满足规格要求长度 [3, 64] 且符合命名规格不能为任何仓颉语法关键字大小写不敏感组织名不能为defaultcjpm.toml中包含模块说明description根目录下包含中文文档README_zh.md或英文文档README.md模块的依赖项均为中心仓形式即不能依赖本地path依赖直接发布。编译检查进行编译检查确保模块能够编译通过未配置--skip-test时会运行单元测试。编译和测试失败均导致打包失败。代码静态检查未配置--skip-lint时调用cjlint进行静态检查出现error级别错误会导致打包失败。打包基于include/exclude将当前模块打包成tar.gz格式的制品源码包文件名为模块名-版本号.cjp位于编译产物目录同时生成元数据文件meta-data.json。继续以demo为例假设version 1.0.0未配置编译产物目录时默认为target。执行cjpm bundle后target目录中会有target ├── demo-1.0.0.cjp # 制品源码包 ├── meta-data.json # 制品元数据 └── 其他编译产物demo-1.0.0.cjp可以按tar.gz格式解压解压结果即打包范围内文件的内容。注意元数据文件记录了本地模块的关键信息供中心仓网页进行制品信息展示详见下一节。五、元数据meta-data.json与索引规格原文档说明元数据文件记录了本地模块的关键信息请参阅 中心仓元数据规格。cjpm bundle生成的元数据用于仓库端入库检查和网页端制品展示规格如下{ organization: cangjie, // 组织名为空则为无组织 name: demo, // 模块名 version: 1.0.0, // 版本号 cjc-version: 1.0.0, // 仓颉 SDK 版本号 description: demo for cangjie central repository, // 模块描述 artifact-type: src, // 制品包类型固定为源码包 src executable: true, // 是否可以编译成可执行程序package.output-type executable 时为 true authors: [Tom, Joan], // 作者 ID 列表 repository: https://github.com/xxx, // 制品代码仓 homepage: https://xxx.com, // 制品主页 documentation: https://xxx.com/docs, // 制品文档页 tag: [cangjie, cjpm], // 制品标签 category: [Network], // 制品分类 license: [Apache-2.0], // 协议列表 index: { ... }, // 制品包索引 meta-version: 1 // 元数据规格版本号 }其中index制品包索引记录了依赖信息cjpm利用它做依赖解析关键项包括{ dependencies: [ { name: dep1, // 依赖项模块名 require: 1.1.0, // 依赖项版本需求 target: null, // 平台隔离标识null 表示不区分平台 type: null, // 编译模式标识null 表示不区分编译模式 output-type: null // 编译产物类型null 表示遵循被依赖模块的 package.output-type } ], test-dependencies: [], // 测试依赖项 script-dependencies: [], // 构建脚本依赖项 sha256sum: ..., // 对应制品包的 SHA-256 校验码用于验证制品包完整性 yanked: false, // 制品包弃用标识true 表示已被弃用 index-version: 1 // 索引规格版本号 }这里的sha256sum正是后面publish校验制品包完整性所依据的校验码。六、publish命令把制品包发布到中心仓cjpm提供publish命令将bundle生成的制品源码包发布到中心仓。执行publish时cjpm会检查编译产物目录中是否存在模块名-版本号.cjp制品源码包与meta-data.json元数据文件。若任一文件不存在或元数据中的制品包校验码与制品包不匹配则重新执行默认bundle流程随后将有效的制品源码包和元数据发布到中心仓。也就是说cjpm publish在缺包或包被改动过如手工修改了target下的.cjp时会自动重新打包保证上传内容与元数据一致。publish发布成功需要满足以下条件已在cangjie-repo.toml中配置有效的用户 token上传的制品包唯一即仓库中不存在另一个制品包与新上传制品包的组织名、制品名和版本号均相同若制品包隶属于某个组织则 token 对应的用户必须是该组织的成员发布的制品包通过中心仓的安全扫描。结合 中心仓通信规格publish实际向repository.home.registry发起的请求为方法POSTurl无组织模块为/pkg/${module-name}组织内模块为/pkg/${module-name}?organization${org-name}url 中不体现版本号headerAuthorization${token}body依次为元数据1 byte 元数据版本 4 byte 长度 m byte 元数据内容与制品包1 byte 制品包版本 4 byte 长度 n byte 制品包内容的序列化字节流。返回码方面排错时可参考401用户认证失败token 无效或过期可到官网 API Tokens 页面刷新403用户无权限或制品包名已被占用制品包名不区分大小写409上传的制品包与仓库已有制品包冲突429每日请求频率超限。发布成功后制品即出现在中心仓官网的制品详情页展示README、标签、版本、依赖、作者与分类等信息七、发布前自检清单在动手执行cjpm publish之前可对照以下清单自查均可在上述文档与配置中验证命名合规模块名/组织名满足长度 [3, 64]、字符集与关键字限制组织名不为default必填字段齐全cjc-version、name、version、output-type已配置description已填写文档存在根目录存在README.md或README_zh.md注意两者都会被默认打包进制品包依赖形式dependencies/test-dependencies/script-dependencies均为中心仓形式path本地依赖不能直接发布打包范围符合预期include/exclude规则按上文 glob 语义检查确认不会把大文件、二进制文件二进制会被强制排除或密钥类文件误打包编译与测试通过未加--skip-test时单元测试必须全部通过静态检查无 error未加--skip-lint时cjlint不能有error级别问题token 有效且权限足够cangjie-repo.toml中 token 未过期组织制品需为该组织成员版本号唯一目标版本尚未发布过避免409冲突。完成以上检查后在项目根目录依次执行cjpm bundle可加-V观察过程与cjpm publish制品即可发布到仓颉中心仓供其他开发者通过dependencies依赖或cjpm installexecutable类型安装使用。赞分享文档编程语言【免费下载链接】cangjie_docs仓颉编程语言开发者文档。项目地址https://gitcode.com/Cangjie/cangjie_docs点击查看免费下载相关推荐仓颉中心仓制品规格详解制品包、制品与组织的概念及命名规范仓颉中心仓制品规格详解制品包、制品与组织的概念及命名规范 仓颉中心仓Cangjie Central Repository以 制品 为单位统一管理三方库本文档编程语言仓颉中心仓 cjpm 客户端配置详解cangjie-repo.toml 配置文件完整指南仓颉中心仓 cjpm 客户端配置详解cangjie repo.toml 配置文件完整指南 本文围绕仓颉项目管理工具 cjpm 集成的中心仓客户端功能系统讲解文档编程语言Cloudflare Workers Smart Placement 配置实战wrangler.jsonc 调优、前端后端拆分与避坑指南Cloudflare Workers Smart Placement 配置实战wrangler.jsonc 调优、前端后端拆分与避坑指南 Smart Plac文档知识库RAGAI 应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑