From e8fc126fa650f8b2b50d4259fca84c26d21cc189 Mon Sep 17 00:00:00 2001 From: wc24 Date: Sat, 23 May 2026 19:03:04 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=20./types=20?= =?UTF-8?q?=E5=AD=90=E5=85=A5=E5=8F=A3,=E5=8F=AA=20ship=20IShrimpType.ts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 前端 / shrimp-admin / 任何"只要协议、不要框架运行时"的消费方装上 shrimp-server 后,import from 'shrimp-server/types' 就能拿到 types + ShrimpCode + ShrimpError,不会触发 Shrimp 主类 / Mongoose / express。 IShrimpType.ts 无外部 import,exports 字段把它单独切出来,vite/webpack 打包到前端时不会顺手拉走 Mongo 链。 v0.4.0 --- README.md | 15 ++++++++++----- package.json | 6 +++++- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 6027611..99f5dea 100644 --- a/README.md +++ b/README.md @@ -6,10 +6,10 @@ ```sh # 推荐: HTTP(任何能访问 git.zeromvc.com 的机器都能用) -npm install git+http://git.zeromvc.com/wc24/shrimp-server.git#v0.3.0 +npm install git+http://git.zeromvc.com/wc24/shrimp-server.git#v0.4.0 # 也可以 SSH(需要 ssh key 配好) -npm install git+ssh://git@git.zeromvc.com:wc24/shrimp-server.git#v0.3.0 +npm install git+ssh://git@git.zeromvc.com:wc24/shrimp-server.git#v0.4.0 ``` > 仓库 ship `.ts` 源码,消费方项目需要 TS 运行器(`tsx` / `ts-node`)或在打包工具(vite / webpack / esbuild)里能解析 `.ts`。 @@ -61,9 +61,9 @@ npm install git+ssh://git@git.zeromvc.com:wc24/shrimp-server.git#v0.3.0 Node 22+ 的 CJS 加载器 **会**读 `exports`,所以运行时不需要额外配置 — 只是 TS 的 类型解析在 `moduleResolution: "node"` 模式下落后于 Node 实际行为,需要 paths 兜底。 -### 两个入口,按需选择 +### 三个入口,按需选择 -包内提供了**核心**和**完整 server** 两个 entry,**peer deps 全部 optional**——你只装自己用得到的那一份: +包内提供了**核心**、**完整 server** 和**纯类型**三个 entry,**peer deps 全部 optional**——你只装自己用得到的那一份: ```ts // 1) 核心: 0 重依赖(只需 node + tsx),适合自己接 HTTP / 只用内存 CRUD / 嵌入其它框架 @@ -71,9 +71,14 @@ import { Shrimp, ShrimpTableModule, MemoryShrimpCrud, ShrimpFieldTypes } from "s // 2) 完整 server: 自带 Express Router + Mongoose + JWT,需要装上面 4 个 peer import { ShrimpServer, MongoShrimpCrud } from "shrimp-server/server" + +// 3) 纯类型: 只含 IShrimpType.ts(types + ShrimpCode enum + ShrimpError class) +// 给前端 / shrimp-admin / 任何"只要协议、不要框架运行时"的消费方 +import { ShrimpCode, ShrimpError } from "shrimp-server/types" +import type { IFieldConfig, IMenuItem, IMeResult } from "shrimp-server/types" ``` -只用 (1) 时,**不要**在自己的 package.json 里写 express/mongoose/bcrypt/jsonwebtoken,可以省下大量 install 时间(尤其是 mongoose 的 native binding)。需要 (2) 时按 peer 范围装齐即可。 +只用 (1) 时,**不要**在自己的 package.json 里写 express/mongoose/bcrypt/jsonwebtoken,可以省下大量 install 时间(尤其是 mongoose 的 native binding)。需要 (2) 时按 peer 范围装齐即可。(3) 完全独立,既不会拉 Shrimp 主类也不会拉 mongoose,前端 bundle 安全。 > bcrypt 在 core 里走的是动态 `import('bcrypt')`,不触发 Password 字段 hash / `UserModule.verifyPassword` 就完全不会去 require 它。所以即便用 core 也注册了 password 字段,只要你不真正调用 `add/edit` 写入 Password 或 `getUser` 校验密码,bcrypt 仍是可不装的。 diff --git a/package.json b/package.json index b48e03b..39a803c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "shrimp-server", - "version": "0.3.0", + "version": "0.4.0", "private": true, "description": "Shrimp 框架后端 — 声明式字段驱动的 Node.js 管理后台框架(Express + Mongoose + JWT)", "main": "src/index.ts", @@ -14,6 +14,10 @@ "types": "./src/server/index.ts", "default": "./src/server/index.ts" }, + "./types": { + "types": "./src/IShrimpType.ts", + "default": "./src/IShrimpType.ts" + }, "./package.json": "./package.json" }, "files": [