一键导入
cangjie-package
仓颉语言包管理。当需要了解仓颉语言的包声明(package)、程序入口(main)、包导入(import/import as)、重新导出(public import)、顶层访问修饰符(private/internal/protected/public)等特性时,应使用此 Skill。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
仓颉语言包管理。当需要了解仓颉语言的包声明(package)、程序入口(main)、包导入(import/import as)、重新导出(public import)、顶层访问修饰符(private/internal/protected/public)等特性时,应使用此 Skill。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
当需要构建鸿蒙应用项目时,使用此 Skill 执行构建流程。此 Skill 包含完整的构建命令、构建流程说明、构建失败处理流程。构建脚本会自动执行依赖安装、仓颉预编译、资源生成、编译、打包等步骤。
在鸿蒙应用(Cangjie)开发中,当需要使用 stdx 拓展库(如 crypto、encoding、net、log、actors 等),或在构建/链接阶段出现 stdx 相关错误时,使用此 Skill 获取/解压 stdx 包,并指导在 entry/cjpm.toml 中正确配置 bin-dependencies.path-option。
在进行仓颉工程或鸿蒙应用开发时的第一步,应该优先读取该SKILL,用来确定后续的开发步骤。
仓颉语言内置注解。当需要了解仓颉 SDK 提供的内置注解(@sourcePackage/@sourceFile/@sourceLine/@When/@FastNative/@Frozen/@Attribute/@Deprecated)的用途、语法和最优实践时,应使用此 Skill。
仓颉语言附录参考。当需要查阅仓颉语言的关键字列表、运算符优先级与结合性、运算符重载函数签名、运行时环境变量配置、包兼容性规则、TokenKind枚举类型时,应使用此 Skill。
仓颉标准库 Array 类型详细指南。当需要了解 Array 的构造、元素访问、切片、拼接、查找、排序、拷贝、反转、映射、扁平化等操作的完整 API 和用法时,应使用此 Skill。
| name | cangjie-package |
| description | 仓颉语言包管理。当需要了解仓颉语言的包声明(package)、程序入口(main)、包导入(import/import as)、重新导出(public import)、顶层访问修饰符(private/internal/protected/public)等特性时,应使用此 Skill。 |
main 入口须在其根目录中package pkg1.sub1 声明,须与相对于 src/ 的目录路径匹配src/ 根目录的文件如果没有包声明,则默认为 default 包src
|-- network
| |-- http
| | |-- client.cj // package default.network.http
| | |-- server.cj // package default.network.http
| |-- util.cj // package default.network
|-- main.cj // 可省略包声明,默认为 default 包
// client.cj — 包声明须匹配相对于 src/ 的路径
package default.network.http
public class HttpClient { /* ... */ }
// 错误示例
package a
public class B {} // ❌ 错误:B 与子包 a.B 冲突
main 函数main 是入口点,每个根包最多一个Array<String>Unit 或整数类型func 关键字main 函数示例// 无参 main,返回整数
main(): Int64 {
return 0
}
// 带命令行参数的 main
main(args: Array<String>): Unit {
for (arg in args) {
println(arg)
}
}
// ❌ 错误:返回类型不能是 String
main(): String { return "" }
// ❌ 错误:参数类型只能是 Array<String>
main(args: Array<Int8>): Int64 { return 0 }
import fullPkg.item // 导入单个声明
import fullPkg.{a, b} // 导入多个声明
import fullPkg.* // 导入所有可见声明
import {pkg1.*, pkg2.*} // 同时导入多个包
package 之后、其他声明之前// package pkga
package pkga
public struct R {}
public func f(a: Int32) {}
public func f(a: Bool) {}
// package pkgb
package pkgb
import pkga.*
struct R {} // 本地 R 遮蔽导入的 R
func f(a: Int32) {} // 本地 f(Int32) 遮蔽导入的同签名函数
func bar() {
R() // 使用本地 R
f(1) // 调用本地 f(Int32)
f(true) // 调用导入的 f(Bool),构成重载
}
String、Range 等可用是因为 core 包被自动导入import pkg.name as newName、import pkg as aliasimport fullPkg 用作命名空间限定符// 用 import as 解决名称冲突
import p1.C as C1
import p2.C as C2
main() {
let _ = C1() // 使用 p1 的 C
let _ = C2() // 使用 p2 的 C
}
// 用包名作为命名空间限定符
import p1
import p2
main() {
let _ = p1.C() // 通过包名限定
let _ = p2.C() // 通过包名限定
}
public import、protected import、internal import 重新导出导入的成员private import(默认)将导入限制为文件内可见// package a — 重新导出子包的声明
package a
public import a.b.f // 将 a.b 中的 f 重新导出
public let x = 0
// package a.b
internal package a.b
public func f(): Int64 { 0 }
// 外部包可直接通过 package a 访问 f
import a.f // OK
let _ = f() // OK
// ❌ 错误:包不能被重新导出
public import a.b // Error
| 修饰符 | 当前文件 | 包及子包 | 当前模块 | 全局 |
|---|---|---|---|---|
private | ✓ | ✗ | ✗ | ✗ |
internal(默认) | ✓ | ✓ | ✗ | ✗ |
protected | ✓ | ✓ | ✓ | ✗ |
public | ✓ | ✓ | ✓ | ✓ |
package 声明默认为 publicimport 默认为 privateinternalpublic 声明可在内部(函数体、初始化表达式中)使用非 public 类型Int64 为 publicprivate 声明在导出时可能导致错误package a
private func f1() { 1 } // 仅当前文件可见
func f2() { 2 } // internal:当前包及子包可见
protected func f3() { 3 } // 当前模块可见
public func f4() { 4 } // 全局可见
// ❌ 错误:public 声明不能使用 internal 类型作为参数/返回值
class C {} // 默认 internal
public func f1(a: C): Int64 { 0 } // Error
public let v1: C = C() // Error