Skip to content

项目 ​

项目就是一个包含 sprig.toml 的目录。单文件模式永久保留: 显式文件在项目 source root 之外时不使用 manifest;在 root 内时仍使用该项目依赖图, 需要当前 lockfile。

目录与默认值 ​

text
project/
├── sprig.toml
├── src/
│   └── main.spr
└── build/
toml
[project]
name = "hello"
version = "0.1.0"
language = "0.8"

source 默认为 src,entry 默认为 src/main.spr,都可以在 [project] 中覆盖。包名来自 manifest——.spr 源码不写 package。

创建与查看 ​

bash
sprig init          # 创建 sprig.toml 与 src/main.spr,绝不覆盖已有文件
sprig project       # 人类可读摘要
sprig project --json

project --json 输出 root、name、version、language、源码根、入口、binaries、 exports、manifest 与 lockfile 路径、lock 状态与声明的依赖,Agent 无需自己解析 TOML。

运行项目 ​

bash
sprig check         # 检查项目入口
sprig build
sprig run
sprig run --bin server
sprig run path/to/file.spr   # 显式文件优先于项目发现
sprig test                   # 运行 tests/ 下的普通 Sprig 程序

项目发现会从当前目录向上查找。[[bin]] 声明命名入口:

toml
[[bin]]
name = "server"
entry = "src/server.spr"

Beta SDK 中的 sprig test 使用相同的锁定依赖图,以诊断码核对预期编译失败; 参见测试契约(英文)。

依赖 ​

本地路径与 Git 的 Sprig 依赖已经可以真正解析:编辑 sprig.toml 后运行 sprig resolve。

toml
[[dependency]]
name = "math"
path = "../math"
toml
[[dependency]]
name = "math"
git = "https://example.com/math.git"
branch = "main"
  • name 是包内导入别名;依赖自己的 [project] name 是独立的身份元数据。
  • sprig resolve 生成确定性的 sprig.lock(建议提交)。check/build/run 拒绝缺失或过期的 lock,并且绝不会自己移动 Git 分支——只有 resolve 会。
  • Git 依赖锁定到精确 commit SHA;分支后续移动不会改变已锁定的构建。
  • 用 import "@math/vector.spr" as vector 导入被 export 的模块;只有 exports 列出的模块可被外部导入,路径会 canonicalize,无法逃出依赖源码根。
  • --offline 只使用 Git 缓存(~/.sprig/git),缓存缺 revision 时以 SPR-DEP-OFFLINE 明确失败。
  • 依赖环与同一包内重复别名会被拒绝;不同包可使用相同别名。
  • lock schema 5 使用 root/@a/@util 标识依赖边,并为相对本地依赖记录 owner-relative locator(portable = true,可整体搬迁);绝对路径声明保持 portable = false。schema 1–4 要求显式重新 resolve。lock 校验 compiler identity;bundled @std 来自安装的 SDK,不记录在 project lock 中。
  • symlink 通过 real path 检查;根内且逻辑路径被 export 的 symlink 允许。
  • Git 缓存验证 HEAD、marker 与 tracked/untracked 内容;修改会明确失败。

Maven/JVM 依赖已实现。[[jvm]] 声明精确 release 坐标,resolve 后 check/build/run/api/doctor 自动使用锁定 JAR。 Apache Resolver 处理父 POM、BOM 和传递依赖。Schema-5 记录 JAR/POM SHA-256、图、顺序与本地 locator。 离线需要完整缓存;消费命令不会重新解析。见 依赖契约。

Sprig 采用 Apache-2.0 许可证 · v0.5.0-beta.1 已作为 prerelease 发布