@danielgtmn/umami-react

中文文档
1.1.6发布于 2026/02/22MITTypeScriptESM + CJS零依赖近 30 天下载 2624

The Umami Analytics Loader is a lightweight script that enables you to easily integrate Umami Analytics into your website. Umami is a simple, open-source website analytics tool that provides valuable insights into your website's traffic without compromisi

原始使用文档
文档目录16 节
  1. Installation
  2. Quick Start
  3. Props
  4. Event Tracking
  5. Hook API
  6. Pageview with UTM Parameters
  7. Async UTM Fetching
  8. User Identification
  9. Disabling Auto-Tracking
  10. Framework Examples
  11. Next.js (App Router)
  12. Vite
  13. TypeScript
  14. Development
  15. Contributing
  16. License

React Umami Analytics

A lightweight React component for Umami Analytics — the privacy-focused, open-source alternative to Google Analytics.

Zero runtime dependencies. Full TypeScript support. Works with React 18.2+ and 19.

Installation

pnpm add @danielgtmn/umami-react

Quick Start

import UmamiAnalytics from '@danielgtmn/umami-react';

function App() {
  return (
    <>
      <UmamiAnalytics
        url="https://analytics.example.com"
        websiteId="your-website-id"
      />
      {/* Your app content */}
    </>
  );
}

The component renders nothing — it only injects the Umami tracking script.

Props

PropTypeDefaultDescription
urlstringUMAMI_URL env varYour Umami instance URL
websiteIdstringUMAMI_ID env varYour website tracking ID
debugbooleanfalseLog debug info to console
lazyLoadbooleanfalseLoad script on first user interaction
onlyInProductionbooleantrueSkip loading in development
domainsstring[]—Restrict tracking to specific domains
scriptAttributesRecord<string, string>—Additional <script> attributes

All props can also be set via environment variables:

UMAMI_URL=https://analytics.example.com
UMAMI_ID=your-website-id
UMAMI_DEBUG=false
UMAMI_LAZY_LOAD=true

Event Tracking

Use the useUmami hook for custom events, pageviews, and user identification:

import { useUmami } from '@danielgtmn/umami-react';

function MyComponent() {
  const { track, trackPageview, identify } = useUmami();

  return (
    <button onClick={() => track('signup', { plan: 'pro' })}>
      Sign up
    </button>
  );
}

Hook API

const {
  track,                 // track(eventName, eventData?)
  trackPageview,         // trackPageview(pageviewData?)
  trackPageviewWithUTM,  // trackPageviewWithUTM(utmParams, additionalData?)
  trackPageviewAsync,    // trackPageviewAsync(utmId, fetcherFn, additionalData?)
  identify,              // identify(userId) or identify(sessionData)
} = useUmami();

Pageview with UTM Parameters

const { trackPageviewWithUTM } = useUmami();

trackPageviewWithUTM({
  utm_source: 'newsletter',
  utm_medium: 'email',
  utm_campaign: 'spring-sale',
});

Async UTM Fetching

Fetch UTM parameters from your backend before tracking:

import { useUmami, UTMFetcher } from '@danielgtmn/umami-react';

const fetchUTM: UTMFetcher = async (utmId) => {
  const res = await fetch(`/api/utm/${utmId}`);
  return res.json();
};

// Fetches UTM data, then tracks the pageview
// Falls back to basic pageview if the fetch fails
await trackPageviewAsync('campaign-123', fetchUTM);

User Identification

const { identify } = useUmami();

// With a string ID
identify('user-123');

// With session data
identify({ userId: 'user-123', plan: 'pro' });

// Both
identify('user-123', { plan: 'pro' });

Disabling Auto-Tracking

To manually control pageview tracking, disable Umami's auto-tracking:

<UmamiAnalytics
  url="https://analytics.example.com"
  websiteId="your-website-id"
  scriptAttributes={{ 'data-auto-track': 'false' }}
/>

Framework Examples

Next.js (App Router)

// app/layout.tsx
import UmamiAnalytics from '@danielgtmn/umami-react';

export default function RootLayout({ children }) {
  return (
    <html>
      <body>
        <UmamiAnalytics
          url="https://analytics.example.com"
          websiteId="your-website-id"
        />
        {children}
      </body>
    </html>
  );
}

Vite

// src/App.tsx
import UmamiAnalytics from '@danielgtmn/umami-react';

function App() {
  return (
    <>
      <UmamiAnalytics
        url="https://analytics.example.com"
        websiteId="your-website-id"
      />
      {/* Your app */}
    </>
  );
}

TypeScript

All types are exported:

import type {
  UmamiAnalyticsProps,
  UmamiConfig,
  PageviewData,
  UTMFetcher,
} from '@danielgtmn/umami-react';

Development

pnpm install          # Install dependencies
pnpm dev              # Watch mode
pnpm build            # Production build
pnpm test             # Run tests
pnpm test:coverage    # Tests with coverage
pnpm lint             # Lint
pnpm type-check       # Type check
pnpm size             # Check bundle size

Commits follow Conventional Commits. Git hooks (Husky) run type-check, lint, and tests before each commit.

Contributing

  1. Fork the repo
  2. Create your branch (git checkout -b feat/my-feature)
  3. Make sure all checks pass (pnpm test:run && pnpm lint && pnpm type-check)
  4. Commit using conventional commit format
  5. Open a Pull Request

License

MIT

版本与发布记录

@danielgtmn/umami-react 共发布 11 个版本,首次发布于 2025/03/27;过去 12 个月发布了 3 个版本。

版本发布日期距今
1.1.6latest2026/02/228 个月前
1.1.52026/02/228 个月前
1.1.42026/01/139 个月前
1.1.22025/09/111.2 年前
1.1.12025/09/041.2 年前
1.1.02025/09/041.2 年前

关于 @danielgtmn/umami-react 的常见问题

@danielgtmn/umami-react 是什么?

The Umami Analytics Loader is a lightweight script that enables you to easily integrate Umami Analytics into your website. Umami is a simple, open-source website analytics tool that provides valuable insights into your website's traffic without compromisi

如何安装 @danielgtmn/umami-react?

在项目目录运行 npm install @danielgtmn/umami-react,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:react(^18.2.0 || ^19.0.0)、react-dom(^18.2.0 || ^19.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@danielgtmn/umami-react 支持 TypeScript 吗?

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

@danielgtmn/umami-react 支持 ESM 还是 CommonJS?

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

@danielgtmn/umami-react 需要什么版本的 Node.js?

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

@danielgtmn/umami-react 可以商用吗?

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

@danielgtmn/umami-react 的下载量有多少?

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

@danielgtmn/umami-react 还在维护吗?

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