为什么需要它?
在日常开发中,一台电脑可能有几十个项目散在各级文件夹。我们经常在不同的项目间,来回切换资源管理器、启动终端、执行指令,这相当繁琐。
## 即便是简单的一个项目,也具备基本的结构复杂度
Node.js 管理后台前端: D:/companyA/xxx/admin/frontend
Node.js 管理后台服务: D:/companyA/xxx/admin/user-service
Node.js 用户前端: D:/companyA/xxx/user/frontend
Node.js 用户后端: D:/companyA/xxx/user/backend
Node.js 支付沙盒项目: D:/companyA/xxx/payment/sandbox
vitepress 文档项目: D:/companyA/xxx/docs/
## 各种可能的散落
wasm 工具项目: D:/companyB/yyy/wasm/
Python 数据处理脚本: E:/scripts/data-pipeline
Go 微服务十几个: D:/legacy/go/order-service、......
React 实验项目: E:/experiments/openai-test
Markdown 知识管理十几个 E:/markdowns/... (博客、论文、工作、学习..)
并且,当项目多了之后,尤其是知识管理,容易因为忘记了存放位置而重新clone,造成多余的分叉副本。
这类“繁琐”不是技术上的复杂,而是一种认知负荷和操作步骤的反复叠加。
我们需要一个干净、快捷的进入目录的解决方案:
- 足够轻量!
- 足够灵活!
- 不需要心智成本!
All you need is a declaration: this is a project!
现在,你只需要在项目根目录中放置一个
.project 文件,即可借助简单的CLI或GUI工具被发现、管理,然后通过[项目名]或[序号]快捷进行进入操作:
1、启动终端(刚需)
2、打开资源管理器(刚需)
3、或打开typora、vscode等各种以文件夹路径为目标上下文的常用工具。
跨工具 适用于任何编程语言和框架、文档,以及项目组合抽象。
无侵入 只是一个配置文件,甚至空文件,不修改现有代码。
环境隔离 同一个文件夹支持组合放置来隔离配置,轻松切换开发和生产配置。
协议规范
PEP协议(Project Entry Protocol)解决的是如何声明项目,以及如何规范基础配置,以避免不同实现之间的数据依赖冲突。。
在保持一致的文件命名和配置管理基础上,支持任何人、任何工具进行任意功能体验的设计和实现。
项目发现
项目发现总是从用户配置的检索根目录开始,通过搜索.project 文件快速重建中心化索引。
1、协议不定义固定的扫描起点、深度、范围、忽略目标,由上层实现来选择体验策略。
2、对于 .开头 、node_modules 等在主流语义中默认是非业务入口的目录,强烈建议上层实现自动忽略或纳入忽略配置。
项目名与文件命名
所有以 .project 结尾的文件,均被视为合法的项目声明文件。
项目名称的确定遵循以下规则:
1、若声明文件显式具名,则优先使用文件名作为项目名。
2、若未具名,则默认使用其所在文件夹的名称作为项目名。
3、允许同一个文件夹内部有多个声明文件,即支持同一个物理路径可以用不同的逻辑项目来管理进入操作。这意味着你可以借助多个具名.project文件组合来实现策略隔离。
D:/legacy/go/order-service
├── src/
├── order-service.dev.project # 开发环境声明
├── order-service.test.project # 测试环境声明
└── order-service.prod.project # 生产环境声明
文件配置格式
文件内容允许为空。如果配置,则必须统一遵循标准的 YAML 格式,且使用 UTF-8 编码,以确保跨上层实现的存储一致性。
# 示例配置
shell: powershell ## 优先以powershell启动
asAdmin: true ## 要求以管理员权限启动
commands: ## 别名配置最常用命令
start: npm run dev
build: ./scripts/build.sh
协议定义了四个基础配置,以解决最常用的终端进入需求以及能隔离冲突的扩展性需求。
核心属性
-启动终端,进入项目目录
| 属性名 |
类型 |
声明的语义 |
shell |
String |
偏好的终端类型(如 wt, bash, powershell)。 |
asAdmin |
Boolean |
是否需要以管理员/Root权限执行,主要针对windows。 |
commands |
Map |
自定义命令映射表,如 start, test 等。 |
附注:启动用其他以路径为目标上下文的应用(比如typora、vscode、资源管理器)的功能,因不依赖配置,协议不做约束,均有上层自由实现。
扩展属性
-扩展槽
| 属性名 |
类型 |
说明 |
extensions |
map{string,map} |
上层扩展占位槽。 |
语义说明:
1、协议层永远不依赖其中任何字段,所有上层功能扩展必须放入此槽内。
2、extensions采用命名空间隔离,每个命名空间代表一个上层产品或能力单元,且更新操作时不应该破坏其他命名空间的原值。为降低空间冲突概率,建议使用带产品域名的空间命名规则。