# @jsondrop/drupal 中文文档

规范地址：https://npmcn.com/package/%40jsondrop/drupal/

版本：0\.1\.0
npm 元数据更新时间：2026-11-01T13:49:01.251Z
中文译文更新时间：2026-11-01T14:29:47.568Z
软件包许可：MIT

本文由上游 README 机器翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40jsondrop/drupal
原文对照：https://npmcn.com/package/%40jsondrop/drupal/?lang=original
项目主页：https://github.com/valicm/jsondrop/tree/main/packages/drupal#readme
源码仓库：https://github.com/valicm/jsondrop

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：79.5 kB，43 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=20\.19
- 运行依赖：0 个
- peer 依赖：@jsondrop/core ^0\.1\.0
- 首次发布：2026-11-01T13:48:05.302Z
- 最新版本发布：2026-11-01T13:49:01.065Z
- 已发布版本数：2（近 12 个月 2 个）

## 中文简介

Drupal核心实体类型和@jsondrop/core的帮助器（decpled\_router, menus, views, images）。

## 安装

```sh
npm install @jsondrop/drupal
```

也可以使用：`pnpm add @jsondrop/drupal`、`yarn add @jsondrop/drupal`、`bun add @jsondrop/drupal`

## README

# @jsondrop / drupal

Drupal 11的核心实体类型和帮助器 [`@jsondrop/core`](https://npmcn.com/package/%40jsondrop/core).

```sh
npm install @jsondrop/core @jsondrop/drupal
```

## 类型

导入包将Drupal核心的资源类型注册为 客户:

-   固定的类型: `user--user`， `file--file`， `menu_link_content--menu_link_content`， `path_alias--path_alias`，以及配置实体(`node_type`， `taxonomy_vocabulary`， `media_type`， `user_role`， `block_content_type`);
-   按实体类型回退：any `node--*` 是一个 `Node`， `taxonomy_term--*` 一个 `Term`， `media--*` 一个 `Media`， `block_content--*` 一个 `BlockContent`， `paragraph--*` 一个 `Paragraph`，用基本字段键入。

通过扩展来添加你的bundle的字段：

```ts
import type { ToMany, ToOne } from '@jsondrop/core';
import type { File, ImageMeta, MediaImage, Node, Term, TextField } from '@jsondrop/drupal';

export interface Article extends Node<'article'> {
  body: TextField | null;
  field_image: ToOne<File<ImageMeta>>;
  field_tags: ToMany<Term<'tags'>>;
  field_hero: ToOne<MediaImage>;
}

declare module '@jsondrop/core' {
  interface ResourceTypes {
    'node--article': Article;
  }
}
```

字段值类型： `TextField`， `PathField`， `LinkField`， `FileUri`， `ImageMeta`， `FileMeta`， `DateRangeField`， `AddressField`. 标准配置文件媒体类型： `MediaImage`， `MediaDocument`， `MediaAudio`， `MediaVideo`， `MediaRemoteVideo`.

## 助手

| 助手 | 需要 |  |
| --- | --- | --- |
| `translatePath(client, path)` | decoupled\_router | 解析路径；未找到时为NULL |
| `getResourceByPath(client, path, options)` | decoupled\_router | 通过重定向解析路径并获取其实体 |
| `getMenu(client, menu)` / `getMenuItems` | jsonapi\_menu\_items | 作为排序树/平面列表的菜单 |
| `buildMenuTree(items)` |  | 巢的链接 `parent`;也需要核心 `menu_link_content` |
| `getView(client, view, display, { filters, arguments, sort, page })` | jsonapi\_views | 视图显示结果和计数 |
| `image(client, field)` |  | 图像字段为 `{ url, alt, title, width, height }` |
| `fileUrl(client, file)` |  | 绝对文件URL |
| `imageStyleUrl(file, style)` | consumer\_image\_styles | 图像样式派生的URL |

### 用户

| 助手 | 需要 |  |
| --- | --- | --- |
| `getCurrentUser(client)` / `getCurrentUserId` |  | 从入口点登录的用户（任何身份验证） `me` 联系;匿名时为NULL |
| `login(client, { name, pass })` |  | Drupal会话登录(`/user/login`)、服务器端：返回会话cookie、CSRF和注销令牌 |
| `logout(client, session)` |  | 使用注销令牌结束会话 |
| `isLoggedIn(client, cookie)` |  | 会话是否仍然有效 |
| `requestPasswordReset(client, { mail })` |  | 发送一个重置链接；对于未知账户的答案是一样的 |

有关OAuth登录（simple\_oauth），请参见 `OAuthClient` 在 `@jsondrop/core`． 两者都显示在 [例7](https://npmcn.com/package/examples/07-user-login.ts).

```ts
const page = await getResourceByPath<Article>(drupal, '/blog/hello', {
  query: { include: ['field_image', 'field_tags'] },
});
if (!page?.resource) notFound();
```

## 常见问题

### @jsondrop/drupal 是什么？

Drupal核心实体类型和@jsondrop/core的帮助器（decpled\_router, menus, views, images）。

### 如何安装 @jsondrop/drupal？

在项目目录运行 npm install @jsondrop/drupal，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：@jsondrop/core（^0\.1\.0）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @jsondrop/drupal 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @jsondrop/drupal 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @jsondrop/drupal 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=20\.19。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @jsondrop/drupal 可以商用吗？

@jsondrop/drupal 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @jsondrop/drupal 还在维护吗？

最新版本 0\.1\.0 发布于 2026/11/01（1 天前）；至今共发布 2 个版本，其中过去 12 个月发布了 2 个；首次发布于 2026/11/01。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

