@bi-nova/core

中文文档
2.0.0发布于 2026/11/03ISCTypeScriptESM + CJS零依赖近 30 天下载 2744

BI Nova SDK Core

原始使用文档
文档目录21 节
  1. 安装
  2. 快速开始
  3. 微信小程序
  4. 支付宝小程序
  5. H5 应用(浏览器)
  6. 核心概念
  7. 适配器(Adapter)
  8. 插件系统
  9. API
  10. createNova(config)
  11. userId 与匿名访客身份
  12. NovaSDK 实例方法
  13. NovaSDK 实例属性
  14. detectEnv()
  15. UMD 使用
  16. 类型导出
  17. 故障排查
  18. Q: 小程序中报错 "fetch is not defined" 或 "localStorage is not def…
  19. Q: 小程序中网络请求、存储功能不工作?
  20. Q: 如何确认当前使用的适配器?
  21. Q: 跨端开发(Taro/uniapp)如何配置?

@bi-nova/core

NovaSDK 核心包,提供跨平台适配器和插件系统。

支持环境:H5(浏览器)、微信小程序、支付宝小程序。

安装

::: code-group

pnpm add @bi-nova/core
npm install @bi-nova/core

:::

快速开始

⚠️ 重要提示:

  • 微信小程序/支付宝小程序:必须设置 autoEnv: true 或手动指定适配器,否则网络请求、存储等功能将无法正常使用
  • H5 应用:可省略 autoEnv(默认使用 WebAdapter)

微信小程序

import { createNova } from '@bi-nova/core'

const nova = createNova({
  appId: 'your-app-id',
  autoEnv: true, // ⚠️ 小程序环境必须开启,使用 wx.request / wx.getStorageSync 等原生 API
})

或者手动指定适配器:

import { createNova, WechatAdapter } from '@bi-nova/core'

const nova = createNova({
  appId: 'your-app-id',
  adapter: new WechatAdapter(),
})

支付宝小程序

import { createNova } from '@bi-nova/core'

const nova = createNova({
  appId: 'your-app-id',
  autoEnv: true, // ⚠️ 小程序环境必须开启,使用 my.request / my.getStorageSync 等原生 API
})

H5 应用(浏览器)

import { createNova } from '@bi-nova/core'

const nova = createNova({
  appId: 'your-app-id',
  // autoEnv 可省略,默认使用 WebAdapter(fetch / localStorage)
})

核心概念

适配器(Adapter)

适配器抹平不同平台的 API 差异,所有适配器均实现 AdapterInterface:

方法说明
request(url, options)发起网络请求
storage.get(key)读取本地存储
storage.set(key, value)写入本地存储
navigate(url)页面跳转
getEnv()返回当前环境标识

内置适配器:

适配器环境底层实现
WebAdapterH5 / 浏览器fetch / localStorage / location.href
WechatAdapter微信小程序wx.request / wx.getStorageSync / wx.navigateTo
AlipayAdapter支付宝小程序my.request / my.getStorageSync / my.navigateTo

插件系统

通过 nova.use(plugin) 注册插件,插件需满足 Plugin 接口:

interface Plugin {
  name: string
  install(sdk: NovaSDK): void
}

示例:

import { createServices } from '@bi-nova/services'

nova.use(createServices({ env: 'sit', debug: true }))

同名插件仅安装一次,重复调用 use() 会跳过并打印警告。

API

createNova(config)

工厂函数,创建 NovaSDK 实例。

参数:NovaConfig

字段类型必填默认值说明
appIdstring否bi_nova宿主应用及埋点项目标识,同时用于生成当前 SDK 埋点实例的 namespace
autoEnvboolean否false自动检测环境并选择适配器。小程序环境必须设为 true,否则网络请求、存储等功能将无法使用
adapterAdapterInterface否-手动指定适配器(优先级高于 autoEnv)。如 new WechatAdapter()
trackingAdvertTrackerConfig否内置 QT 配置SDK 初始化时自动创建埋点实例;appId 统一使用外层 NovaConfig.appId(未传时为 bi_nova),可配置 url 或设置 enabled: false 关闭

埋点在第一条事件到达时懒初始化,默认沿用 _Lyy_Bury_Point:${appId} storage key。 同一 appId 存在多个 SDK 实例时,可传 tracking.instanceKey,或配置 tracking: { isolateByNamespace: true } 使用 advert-plugin:${appId}:${instanceKey || 'default'} 隔离会话;显式传入 tracking.namespace 的优先级最高。

userId 与匿名访客身份

埋点始终使用 qt-hook payload 顶层的 userId 字段,不增加 biVisitorId 等扩展字段。

  • tracking.getUserId 仅用于同步读取宿主已经缓存的真实用户 ID,不能在其中发起异步登录请求。
  • 如果初始化时没有真实 ID,SDK 默认在当前 namespace 生成一次 anon_v1_<唯一值>,并写入持久化 storage:微信/支付宝使用 setStorageSync,H5 使用 localStorage,不会使用 sessionStorage。
  • 登录接口异步返回后调用 await nova.tracking.setUserId(loginResult.userId),后续事件会覆盖为真实 ID。
  • 退出登录调用 await nova.tracking.clearUserId(),恢复同一 namespace 的匿名 ID。
  • 匿名 ID 只保存在 SDK 自己的 __BI_NOVA_USER_ID__:<namespace> key 中,不扫描或读取其他 _Lyy_Bury_Point* key,也不会把真实账号写入该匿名 key。

示例:

const nova = createNova({
  appId: 'your-app-id',
  autoEnv: true,
  tracking: {
    getUserId: () => app.globalData.userId || undefined,
  },
})

const loginResult = await login()
app.globalData.userId = loginResult.userId
await nova.tracking.setUserId(loginResult.userId)

React Native 需要在创建 SDK 前注册 Native 端实现:

import '@bi-nova/core/native'

返回值: NovaSDK 实例

适配器选择逻辑:

  1. 若传入 adapter,直接使用
  2. 若 autoEnv: true,调用 detectEnv() 自动选择
  3. 否则默认使用 WebAdapter ⚠️ 小程序环境必须设置 autoEnv: true,否则功能异常

NovaSDK 实例方法

方法签名说明
use(plugin: Plugin) => this注册插件
request(url: string, options?: any) => Promise<any>发起网络请求(代理适配器)
getStorage(key: string) => any读取本地存储
setStorage(key: string, value: any) => void写入本地存储
navigate(url: string) => void页面跳转
getEnv() => string获取当前环境标识

NovaSDK 实例属性

属性类型说明
configNovaConfig初始化配置
trackingAdvertTracker当前 SDK 实例的埋点实例;组件生命周期事件会复用该实例
uiUIPluginUI 组件插件入口

nova.tracking 用户身份方法:

await nova.tracking.setUserId(loginResult.userId) // 覆盖 anon_v1_...
await nova.tracking.clearUserId()                 // 恢复持久化匿名 ID
const userId = nova.tracking.getUserId()

detectEnv()

检测当前运行环境。

import { detectEnv } from '@bi-nova/core'

const env = detectEnv() // 'web' | 'wechat' | 'alipay' | 'unknown'

检测优先级: wechat > alipay > web > unknown

UMD 使用

通过 <script> 标签引入 UMD 产物后,所有导出挂载在 window.BiNova 上:

<script src="bi-nova.umd.js"></script>
<script>
  const { createNova } = window.BiNova
  const nova = createNova({ appId: 'xxx', autoEnv: true })
</script>

UMD 全局类型声明可通过 @bi-nova/core/global 导入:

/// <reference types="@bi-nova/core/global" />

类型导出

import type {
  AdapterInterface,
  NovaConfig,
  Plugin,
} from '@bi-nova/core'

import type { ComponentBinding, ComponentHandle } from '@bi-nova/core'

故障排查

Q: 小程序中报错 "fetch is not defined" 或 "localStorage is not defined"?

原因: 未设置 autoEnv: true,SDK 默认使用 WebAdapter(依赖 fetch、localStorage 等 Web API),而小程序环境不支持这些 API。

解决方案:

// 方式一:开启自动环境检测(推荐)
const nova = createNova({
  appId: 'your-app-id',
  autoEnv: true, // 自动选择 WechatAdapter 或 AlipayAdapter
})

// 方式二:手动指定适配器
import { WechatAdapter } from '@bi-nova/core'
const nova = createNova({
  appId: 'your-app-id',
  adapter: new WechatAdapter(),
})

Q: 小程序中网络请求、存储功能不工作?

原因: 同上,使用了错误的适配器。

解决方案: 设置 autoEnv: true 或手动指定对应平台的适配器。

Q: 如何确认当前使用的适配器?

方法: 调用 nova.getEnv() 查看当前环境:

console.log(nova.getEnv()) // 'web' | 'wechat' | 'alipay'

Q: 跨端开发(Taro/uniapp)如何配置?

推荐配置: 设置 autoEnv: true,让 SDK 根据运行环境自动选择适配器:

const nova = createNova({
  appId: 'your-app-id',
  autoEnv: true, // H5 用 WebAdapter,小程序用对应适配器
})

版本与发布记录

@bi-nova/core 共发布 20 个版本,首次发布于 2026/05/16;过去 12 个月发布了 20 个版本。

版本发布日期距今
2.0.0latest2026/11/035 天前
2.0.0-beta.202611031735beta2026/11/035 天前
2.0.0-beta.2026110317272026/11/035 天前
2.0.0-beta.2026110214442026/11/026 天前
2.0.0-beta.2026110211342026/11/026 天前
2.0.0-beta.2026103017262026/10/309 天前

关于 @bi-nova/core 的常见问题

@bi-nova/core 是什么?

BI Nova SDK Core

如何安装 @bi-nova/core?

在项目目录运行 npm install @bi-nova/core,或使用 pnpm add / yarn add / bun add。

@bi-nova/core 支持 TypeScript 吗?

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

@bi-nova/core 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@bi-nova/core 可以商用吗?

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

@bi-nova/core 的下载量有多少?

根据 npm 官方下载统计,@bi-nova/core 在 2026/10/08 – 2026/11/06 这 30 天内被下载 2,744 次,日均约 91 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@bi-nova/core 还在维护吗?

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