@jsondrop/drupal

中文文档
0.1.0发布于 2026/11/01MITTypeScriptES Module零依赖

Drupal核心实体类型和@jsondrop/core的帮助器(decpled_router, menus, views, images)。

中文使用文档
文档目录3 节
  1. 类型
  2. 助手
  3. 用户

@jsondrop / drupal

Drupal 11的核心实体类型和帮助器 @jsondrop/core.

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的字段:

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) / getMenuItemsjsonapi_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.

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

版本与发布记录

@jsondrop/drupal 共发布 2 个版本,首次发布于 2026/11/01;过去 12 个月发布了 2 个版本。

版本发布日期距今
0.1.0latest2026/11/011 天前
0.0.0-stage2026/11/011 天前

关于 @jsondrop/drupal 的常见问题

@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 和提交记录判断。