pLang Vendor Packages:pLang 的第三方包管理器
需要 Node.js 环境。
npm i -g --allow-scripts=@peyt/pvp @peyt/pvp安装脚本自动确保 pvp 可执行(纯 C++ 单文件,无 LLVM 等外部依赖)。验证:
pvp path # 打印包根目录
pvp help| 平台 | 路径 |
|---|---|
| macOS | ~/Library/Application Support/pLang/0.x/packages/ |
| Linux | ~/.local/share/pLang/0.x/packages/($XDG_DATA_HOME 优先) |
| Windows | %LOCALAPPDATA%\pLang\0.x\packages\ |
0.x 为 pLang 语言版本目录(1.0 后改 1.x);PLANG_PVP 环境变量可覆盖。
第三方包根目录放一个 pLangLists.json,声明元数据:
{
"name": "strutil",
"version": "1.2.0",
"author": "alice",
"repo": "github.com/user/repo",
"alias": "repo"
}| 字段 | 说明 |
|---|---|
name |
包名 |
version |
版本 |
author |
作者 |
repo |
仓库完整地址(安装身份,pvp 按此装到 github.com/user/repo/) |
alias |
别名(import/调用用) |
.plang 文件里用别名声明包:
package repo; // 别名
pub func shout(var -> var: char s) -> var: ptr { ... }
推送到 GitHub 即完成发布——完整地址就是来源
pvp install github.com/user/repo # 装到 <包根>/github.com/user/repo/
pvp install https://github.com/user/repo.git禁止用别名安装(别名只能用于 import)
pvp 安装时读清单的 repo 定位,把包装到对应路径,并维护 installed.json(别名 → 仓库地址):
{ "repo": "github.com/user/repo" }调试用来源也支持:本地目录 pvp install ./mylib、tar.gz pvp install foo.tar.gz(此时身份取清单 repo 字段,没有则取别名)。
import repo; // 别名(pvp 装的时候登记的)
import std.io;
func main() : int {
io.println(repo.shout("hi"));
return 0;
}
编译器解析 import <别名> 时查 <包根>/installed.json,找到对应仓库地址再解析。直接写完整地址 import github.com/user/repo; 也能解析。
pvp install <完整地址|git-url|本地目录|.tar.gz> 安装(身份 = 清单 repo)
pvp update <别名> 按记录来源重装
pvp remove <别名> 卸载(清理 installed.json)
pvp list 列出已装包(别名 + 地址 + 版本)
pvp info <别名> 查看元数据
pvp check 校验已装包
pvp export <别名> [输出.tar.gz] 打包为 tar.gz 分发
pvp path 打印包根目录
pvp help 帮助
pvp install 自动把别名写入项目 pLangLists.json 的 "dependencies":
{
"name": "demo",
"dependencies": ["repo"]
}plc build 不会自动拉依赖;缺包时编译报错,手动 pvp install 即可。
每个已装包含 pvp-pkg.json:
{
"name": "github.com/user/repo",
"alias": "repo",
"author": "alice",
"source": "github.com/user/repo",
"version": "1.2.0"
}| 变量 | 作用 |
|---|---|
PLANG_PVP |
覆盖包根目录 |