包管理器
通过包管理器 cjpm 提供项目级编译构建能力,自动依赖管理实现对引入的多版本三方依赖软件进行分析合并,无需开发者担心多版本依赖冲突问题,大大减轻开发者负担;同时提供基于仓颉语言原生的自定义构建机制,允许开发者在构建的不同阶段增加预处理和后处理流程,实现构建流程可灵活定制,能够满足开发者不同业务场景下的编译构建诉求。
自动依赖管理
对于项目中引入的多版本依赖模块,cjpm 会对它进行依赖分析,计算出最终依赖,实现对依赖管理的自动化,开发者无需手动去管理项目中的依赖冲突问题,实现自动依赖管理后,包管理器在编译构建时,会扫描工程的所有依赖关系,对相同模块依赖的不同版本进行同类项合并,不会因为导入多版本的依赖产生编译构建错误,开发者只需要执行 cjpm build
就可以实现项目级构建,极大减轻开发者负担。
以上图为例:项目的直接依赖模块 A 和模块 B,其中模块 A 依赖模块 C 的 1.3 版本,模块 B 依赖模块 C 的 1.4 版本,如果不做依赖分析和管理,编译时会由于多版本依赖产生依赖冲突,导致编译错误。通过 cjpm 的依赖管理,将模块 C 进行依赖分析后,合并到同一个版本依赖。
用户自定义构建
在仓颉项目构建时,开发者会有若干与编译仓颉代码有一定关联性的其他自定义行为诉求,如环境变量配置、外部依赖库的拷贝、CFFI 源码依赖时需要先编译 C 文件的前置操作等,如 Rust 语言通过 cargo 工具提供 build 前置构建的开发者自定义配置。
cjpm 允许开发者在任意构建阶段增加前置/后置自定义构建行为,帮助开发者解决复杂项目构建问题,无需切换其他构建工具,实现项目的一站式构建管理。
以上图为例:开发者自定义了编译 cffi 模块的 stagePreBuild
任务和删除 cffi 源码的 stagePostBuild
任务,当执行 build 命令时,cjpm 会先执行 stagePreBuild
任务,build 完成后再执行 stagePostBuild
任务。