@basenative/notify

中文文档
3.0.0发布于 2026/10/31Apache-2.0TypeScriptES Module构建来源已验证

电子邮件通知通过SMTP和SendGrid与模板呈现

中文使用文档
文档目录8 节
  1. 安装
  2. 快速入门
  3. 应用内通知
  4. API
  5. 电子邮件
  6. 传输
  7. 应用内通知
  8. 许可证

@ basenative/notify

使用HTML模板、应用内通知和SMTP/SendGrid/Resend传输发送电子邮件

部分 BaseNative 生态系统——基于信号的web运行时,基于原生HTML。

安装

npm install @basenative/notify

快速入门

import {
  renderEmail,
  createEmailSender,
  createSmtpTransport,
} from '@basenative/notify';

const transport = createSmtpTransport({
  host: 'smtp.example.com',
  port: 587,
  auth: { user: '[email protected]', pass: process.env.SMTP_PASS },
});

const sender = createEmailSender(transport);

const template = `
  <h1>Hello, {{ name }}!</h1>
  <p>Your account has been created. <a href="{{ link }}">Get started</a></p>
`;

const { html, text } = renderEmail(template, {
  name: 'Alice',
  link: 'https://example.com/onboarding',
});

await sender.send({
  from: '[email protected]',
  to: '[email protected]',
  subject: 'Welcome!',
  html,
  text,
});

应用内通知

import { createNotificationCenter } from '@basenative/notify';

const notifications = createNotificationCenter();

notifications.add({ type: 'info', message: 'Your report is ready.' });
notifications.add({ type: 'error', message: 'Payment failed.', persistent: true });

// Read all active notifications
const all = notifications.getAll();
notifications.dismiss(all[0].id);

API

电子邮件

  • renderEmail(template, data) -插值 {{ variable }} HTML模板中的占位符。返回 { html, text } 哪里 text 是源自HTML的纯文本版本。
  • createEmailSender(transport) -创建绑定到传输的发件人。返回 { send(options) } 选项在哪里? { to, from, subject, html, text? }.

逃脱

每一个 {{ variable }} value默认为html转义,使用相同的 escapeAttr 助手 @basenative/server SSR模板的使用 (@basenative/runtime/shared/escape)。一个包含 <script> 或者 其他标记呈现为惰性文本,而不是可执行的HTML:

renderEmail('<p>Hi {{ name }}</p>', { name: '<script>alert(1)</script>' });
// => { html: '<p>Hi &lt;script&gt;alert(1)&lt;/script&gt;</p>', ... }

要插入受信任的HTML而不转义,请将值包装在 raw():

import { raw } from '@basenative/runtime/shared/escape';

renderEmail('<div>{{ body }}</div>', { body: raw('<strong>Bold</strong>') });
// => { html: '<div><strong>Bold</strong></div>', ... }

仅通过 raw() 在你信任的HTML周围——它完全禁止转义 该值,在占位符出现的每个位置({{ }} 插值 这里不知道它是落在文本节点还是属性值中,所以 选择退出逃避选择退出两者)。

传输

  • createSmtpTransport(options) —通过SMTP协议发送邮件。选项: host, port, secure, auth: { user, pass }.
  • createSendGridTransport(options) -通过SendGrid API发送电子邮件。选项: apiKey.
  • createResendTransport(options) -通过Resend API发送电子邮件。选项: apiKey.

应用内通知

  • createNotificationCenter() -创建应用内通知商店。
    • .add(notification) —添加通知。字段: type ('info', 'warn', 'error', 'success'), message, persistent?, metadata?。返回创建的通知,其中包含自动生成的 id.
    • .dismiss(id) -按ID删除通知。
    • .getAll() -返回所有活动通知。
    • .clear() -删除所有通知。

许可证

apache - 2.0

版本与发布记录

@basenative/notify 共发布 11 个版本,首次发布于 2026/03/20;过去 12 个月发布了 11 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
3.0.0latest2026/10/312 天前
2.4.02026/10/268 天前
2.3.22026/10/2212 天前
2.3.12026/10/2212 天前
2.3.02026/10/2212 天前
2.2.02026/10/2113 天前

关于 @basenative/notify 的常见问题

@basenative/notify 是什么?

电子邮件通知通过SMTP和SendGrid与模板呈现

如何安装 @basenative/notify?

在项目目录运行 npm install @basenative/notify,或使用 pnpm add / yarn add / bun add。

@basenative/notify 支持 TypeScript 吗?

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

@basenative/notify 支持 ESM 还是 CommonJS?

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

@basenative/notify 可以商用吗?

@basenative/notify 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@basenative/notify 还在维护吗?

最新版本 3.0.0 发布于 2026/10/31(2 天前);至今共发布 11 个版本,其中过去 12 个月发布了 11 个;首次发布于 2026/03/20。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。