随着仓颉编程语言生态的不断发展,越来越多的开发者希望为社区贡献自己的力量,开发和分享优质的三方库。然而,从零开始搭建一个标准化、规范化的库项目并不容易。为此,官方提供了一套完整的三方库开发模版,帮助开发者快速启动项目,专注于核心功能的实现,而无需在项目结构和规范上花费过多精力。
本文将详细介绍这个仓颉三方库模版的设计理念、项目结构以及使用方法,帮助你快速上手,开发出高质量的仓颉三方库。
在软件开发中,项目结构的标准化至关重要。一个规范的项目模版能够:
仓颉三方库模版采用了清晰的分层结构,让我们逐一了解每个部分的作用:
template/
├── README.md # 项目主文档
├── CHANGELOG.md # 版本变更记录
├── LICENSE # 开源协议
├── README.OpenSource # 开源声明
├── cjpm.toml # 包管理配置文件
├── doc/ # 文档目录
│ ├── assets/ # 文档资源(图片、图表等)
│ │ └── example.png
│ ├── design.md # 设计文档
│ └── feature_api.md # API 接口文档
├── src/ # 源码目录
│ └── Template.cj # 源代码文件
└── test/ # 测试代码目录
├── HLT/ # 高层测试(High Level Test)
│ └── testcase0001.cj
└── LLT/ # 低层测试(Low Level Test)
└── testcase0001.cj
README 是用户了解你的库的第一窗口,模版提供了完整的章节结构:
这是仓颉包管理器(cjpm)的核心配置文件,定义了:
[package]
name = "demo" # 包名
version = "1.0.0" # 版本号
description = "nothing here" # 描述
cjc-version = "1.0.3" # 编译器版本要求
output-type = "executable" # 输出类型
src-dir = "" # 源码目录
target-dir = "" # 目标目录
compile-option = "" # 编译选项
link-option = "" # 链接选项
[dependencies]
# 依赖库配置
模版提供了完整的文档结构:
存放所有源代码文件(.cj 文件),按模块组织代码结构。
采用分层测试策略:
记录每个版本的变更内容,包括:

# 方式1:克隆模版仓库
git clone <template-repo-url> my-cangjie-lib
#比如
git clone git@gitcode.com:cj-awaresome/template.git my-cangjie-lib
# 方式2:下载压缩包解压
# 将模版下载到本地并重命名为你的项目名称
根据你的项目需求修改包配置:
[package]
name = "my-awesome-lib" # 修改为你的库名
version = "0.1.0" # 设置初始版本
description = "一个很棒的仓颉库" # 描述你的库
cjc-version = "1.0.3" # 根据需要调整编译器版本
output-type = "static_library" # 通常三方库设置为 static_library 或 dynamic_library
将 README.md 中的占位内容替换为你的项目信息:
在 src/ 目录下编写你的核心代码。例如:
// src/MyLib.cj
package my_awesome_lib
// 定义公开的类
public class Calculator {
// 构造函数
public init() {}
// 加法运算
public func add(a: Int64, b: Int64): Int64 {
return a + b
}
// 减法运算
public func subtract(a: Int64, b: Int64): Int64 {
return a - b
}
}
// 定义公开的函数
public func sayHello(name: String): String {
return "Hello, ${name}!"
}
在 doc/design.md 中详细描述你的设计:
# Calculator 库设计
## 描述
提供基础的数学计算功能,包括加减乘除等运算。
## Calculator 类设计
### 类描述
Calculator 是一个简单的计算器类,提供基础的数学运算方法。
### 类 API
```cangjie
public class Calculator {
public init()
public func add(a: Int64, b: Int64): Int64
public func subtract(a: Int64, b: Int64): Int64
}
```
在 doc/feature_api.md 中为每个公开接口提供详细文档:
## add 方法
```cangjie
/*
* 执行两个整数的加法运算
*
* 参数 a - 第一个加数
* 参数 b - 第二个加数
* 返回值 - 两数之和
*/
public func add(a: Int64, b: Int64): Int64
```
在 test/LLT/ 目录下编写单元测试:
// test/LLT/calculator_test.cj
import my_awesome_lib.*
import std.unittest.*
@Test
func testAdd() {
let calc = Calculator()
@Assert(calc.add(2, 3) == 5, "2 + 3 should equal 5")
}
@Test
func testSubtract() {
let calc = Calculator()
@Assert(calc.subtract(5, 3) == 2, "5 - 3 should equal 2")
}
在 test/HLT/ 目录下编写高层测试,测试多个模块的协作。
使用 cjpm 进行构建和测试:
# 更新依赖
cjpm update
# 构建项目
cjpm build
# 运行测试
cjpm test
# 查看测试覆盖率
cjpm coverage
每次发布新版本时,更新 CHANGELOG.md:
# [0.1.0] - 2025-11-02
## Feature
- 实现基础的加法功能
- 实现基础的减法功能
- 添加 Calculator 类
## Bugfix
- 无
## Remove
- 无
同时更新 cjpm.toml 中的版本号。
当你的库开发完成并经过充分测试后,可以考虑发布到仓颉社区:
为了让你更好地理解如何使用这个模版,这里提供一个简单的完整示例——一个字符串工具库:
功能:提供常用的字符串处理工具函数
核心代码(src/StringUtils.cj):
package string_utils
public class StringUtils {
// 反转字符串
public static func reverse(s: String): String {
// 实现代码
}
// 判断是否为回文
public static func isPalindrome(s: String): Bool {
// 实现代码
}
// 统计字符频率
public static func charFrequency(s: String): HashMap<Rune, Int64> {
// 实现代码
}
}
使用示例:
import string_utils.*
main() {
let original = "hello"
let reversed = StringUtils.reverse(original)
println("原字符串: ${original}")
println("反转后: ${reversed}")
let word = "level"
if (StringUtils.isPalindrome(word)) {
println("${word} 是回文")
}
}
A: 在 cjpm.toml 中设置 output-type:
static_library:静态库dynamic_library:动态库executable:可执行程序(用于测试)A:
A: 在 cjpm.toml 的 [dependencies] 部分添加依赖:
[dependencies]
other-lib = "1.0.0"
A:
cjpm.toml 中的 versionCHANGELOG.md 记录变更A: 核心文件(README.md、cjpm.toml、src/、test/)建议保留,其他可根据项目需要调整。但完整的文档体系会大大提升项目的专业性。
仓颉三方库开发模版为开发者提供了一个坚实的起点,让你可以快速启动标准化的库项目。通过遵循模版的结构和规范,你可以:
现在,是时候动手创建你的第一个仓颉三方库了!选择一个你感兴趣的方向,利用这个模版,为仓颉社区贡献你的力量。无论是工具类库、算法库、Web 框架,还是其他任何领域,社区都期待你的创新和分享。
仓颉标准库:https://gitcode.com/Cangjie/cangjie_runtime/tree/main/stdlib
仓颉扩展库:https://gitcode.com/Cangjie/cangjie_stdx
仓颉命令行工具:https://gitcode.com/Cangjie/cangjie_tools
仓颉语言测试用例:https://gitcode.com/Cangjie/cangjie_test
仓颉语言示例代码:https://gitcode.com/Cangjie/Cangjie-Examples
仓颉鸿蒙示例应用:https://gitcode.com/Cangjie/HarmonyOS-Examples
精品三方库:https://gitcode.com/org/Cangjie-TPC/repos
SIG 孵化库:https://gitcode.com/org/Cangjie-SIG/repos
作者:坚果 日期:2025 年 11 月 2 日 版本:1.0
本文基于仓颉三方库模版项目编写,旨在帮助开发者快速入门仓颉库开发。如有任何问题或建议,欢迎在社区中讨论交流。
快来克隆https://gitcode.com/cj-awaresome/template项目开始贡献自己的三方库吧。
参考资料
[1]
仓颉三方库平台(TPC): https://gitcode.com/cj-awaresome
[2]
template: https://gitcode.com/cj-awaresome/template/issues
[3]
联系方式: https://gitcode.com/jianguoxu