---
title: "defineGlobalSingleton"
description: "定义挂在 globalThis 上的跨副本单例，多份打包产物共享同一状态"
canonical_url: "https://core.mhaibaraai.cn/docs/helpers/define-global-singleton"
---
# defineGlobalSingleton

> 定义挂在 globalThis 上的跨副本单例，多份打包产物共享同一状态

## 用法

`defineGlobalSingleton` 以 `Symbol.for(key)` 为键在 `globalThis` 上存取实例：首次调用执行工厂，之后直接返回已有实例。同一个库被多个构建产物各自打包（如 Nuxt 模块与 Vite 插件双构建）时，各副本仍共享同一份状态。

```ts
import { defineGlobalSingleton } from '@movk/core'

interface Config {
  token?: string
}

const config = defineGlobalSingleton<Config>('my-lib:config', () => ({}))

export function setToken(token: string) {
  config.token = token
}
```

> [!TIP]
> 
> key
> 
>  在整个页面内全局可见，建议带上包名前缀（如 
> 
> 'my-lib:config'
> 
> ）避免冲突。

## API

### `defineGlobalSingleton(key, factory)`

定义挂在 `globalThis` 上的跨副本单例。

### 参数

**key** (`string`) *required*: 全局唯一键，经 Symbol.for 转为 symbol。

**factory** (`() => T`) *required*: 首次调用时创建实例的工厂。

### 返回值

**返回值** (`T`): 单例实例。

## Changelog

See commit history for [src/helpers/defineGlobalSingleton.ts](https://github.com/mhaibaraai/movk-core/commits/main/src/helpers/defineGlobalSingleton.ts).

---

- [GitHub](https://github.com/mhaibaraai/movk-core/blob/main/src/helpers/defineGlobalSingleton.ts)


## Sitemap

See the full [sitemap](https://core.mhaibaraai.cn/sitemap.md) for all pages.
