# 安裝與基本使用

- Human documentation: [https://docs.univer.ai/zh-TW/guides/boards/getting-started/installation](https://docs.univer.ai/zh-TW/guides/boards/getting-started/installation)

- Agent Markdown: [https://docs.univer.ai/zh-TW/guides/boards/getting-started/installation.md](https://docs.univer.ai/zh-TW/guides/boards/getting-started/installation.md)

- Requested language: `zh-TW`

- Content language: `zh-TW`

- Documentation version: `1.2.0`

- Source: [boards/getting-started/installation/index.zh-TW.mdx](https://github.com/dream-num/documentation/blob/dev/content/guides/boards/getting-started/installation/index.zh-TW.mdx)

---

本章介紹 Univer Boards 的安裝方式與基本用法。Boards 是 Univer Office SDK 產品，目前採用外掛程式模式提供。

如果不熟悉 Univer 的核心概念，請先閱讀[快速入門](https://docs.univer.ai/zh-TW/guides/boards/getting-started/quickstart.md)。

Univer 提供*預設模式*與*外掛模式*兩種整合方式。預設模式透過預先組合好的外掛簡化設定，更容易上手；如果**需要深度擴充**，建議使用外掛模式，依需求組合與設定外掛。

## 透過外掛模式建立

Univer 以一組外掛程式的形式提供 Boards。瀏覽器編輯器通常會依序註冊共用的 Univer 執行環境、授權外掛程式、文件與繪圖相依套件，接著再註冊 Board 模型和 UI 外掛程式。

### 使用套件管理器

使用支援 ES Module 和 `package.json` 中 `exports` 欄位的建置工具。

#### 安裝

Univer 使用 React 建構介面、RxJS 處理資料流，也可以嵌入 Vue 或 Angular 應用程式。請確認已安裝 `react`、`react-dom` 和 `rxjs` 這些 peer dependencies[^peer-dependency]；下方 Yarn 指令已明確包含它們。

所有 `@univerjs/*` 和 `@univerjs-pro/*` 套件應保持**相同版本**。

#### pnpm

```shell
pnpm add @univerjs/core @univerjs/design @univerjs/docs @univerjs/docs-ui @univerjs/drawing @univerjs/drawing-ui @univerjs/engine-render @univerjs/ui @univerjs-pro/license @univerjs-pro/ink-ui @univerjs-pro/shape-editor-ui @univerjs-pro/boards @univerjs-pro/boards-ui
```

#### npm

```shell
npm install @univerjs/core @univerjs/design @univerjs/docs @univerjs/docs-ui @univerjs/drawing @univerjs/drawing-ui @univerjs/engine-render @univerjs/ui @univerjs-pro/license @univerjs-pro/ink-ui @univerjs-pro/shape-editor-ui @univerjs-pro/boards @univerjs-pro/boards-ui
```

#### yarn

```shell
yarn add @univerjs/core @univerjs/design @univerjs/docs @univerjs/docs-ui @univerjs/drawing @univerjs/drawing-ui @univerjs/engine-render @univerjs/ui @univerjs-pro/license @univerjs-pro/ink-ui @univerjs-pro/shape-editor-ui @univerjs-pro/boards @univerjs-pro/boards-ui react react-dom rxjs
```

#### bun

```shell
bun add @univerjs/core @univerjs/design @univerjs/docs @univerjs/docs-ui @univerjs/drawing @univerjs/drawing-ui @univerjs/engine-render @univerjs/ui @univerjs-pro/license @univerjs-pro/ink-ui @univerjs-pro/shape-editor-ui @univerjs-pro/boards @univerjs-pro/boards-ui
```

#### 使用

初始化 Univer 前，先建立容器並設定明確的高度：

```html
<div id="app" style="height: 600px"></div>
```

呼叫 `FUniver.newAPI(univer)` 前，請引入下方範例使用的 facade 入口。樣式依 `@univerjs/design`、`@univerjs/ui`、產品 CSS 的順序引入。

> [!WARNING: 注意]
> * 請先註冊 `UniverLicensePlugin`，再註冊 Board 外掛程式。
> * 請先匯入共用 UI CSS，再匯入產品 UI CSS。
> * 開啟含有選用元素類型的快照前，請先註冊對應的元素外掛程式。
> * `UniverBoardsUIPlugin` 會為形狀功能自動載入 `UniverProFormulaEnginePlugin`。如果同一個 `Univer` 執行個體還註冊了 `UniverFormulaEnginePlugin`，請安裝 `@univerjs-pro/engine-formula`，並在初始化程式碼中將一般引擎的匯入與註冊替換為 `UniverProFormulaEnginePlugin`。請勿同時註冊兩個公式引擎。

1.
   匯入樣式、語系套件和必要的外掛程式：
   
   ```ts
   import { UniverBoardsPlugin } from '@univerjs-pro/boards'
   import { UniverBoardsUIPlugin } from '@univerjs-pro/boards-ui'
   import BoardsUIEnUS from '@univerjs-pro/boards-ui/locale/en-US'
   import { UniverInkUIPlugin } from '@univerjs-pro/ink-ui'
   import InkUIZhTW from '@univerjs-pro/ink-ui/locale/zh-TW'
   import { UniverLicensePlugin } from '@univerjs-pro/license'
   import { LocaleType, mergeLocales, Univer, UniverInstanceType } from '@univerjs/core'
   import DesignEnUS from '@univerjs/design/locale/en-US'
   import { UniverDocsPlugin } from '@univerjs/docs'
   import { UniverDocsUIPlugin } from '@univerjs/docs-ui'
   import DocsUIEnUS from '@univerjs/docs-ui/locale/en-US'
   import { UniverDrawingPlugin } from '@univerjs/drawing'
   import { UniverDrawingUIPlugin } from '@univerjs/drawing-ui'
   import DrawingUIEnUS from '@univerjs/drawing-ui/locale/en-US'
   import { UniverRenderEnginePlugin } from '@univerjs/engine-render'
   import { UniverUIPlugin } from '@univerjs/ui'
   import UIEnUS from '@univerjs/ui/locale/en-US'
   
   import '@univerjs/design/lib/index.css'
   import '@univerjs/ui/lib/index.css'
   import '@univerjs/docs-ui/lib/index.css'
   import '@univerjs/drawing-ui/lib/index.css'
   import '@univerjs-pro/ink-ui/lib/index.css'
   import '@univerjs-pro/boards-ui/lib/index.css'
   ```

1.
   如要使用 Facade API[^facade-entry]，請匯入 Facade 進入點：
   
   ```ts
   import { FUniver } from '@univerjs/core/facade'
   import '@univerjs-pro/boards/facade'
   ```

1.
   建立 Univer 執行個體、註冊外掛程式，並建立 Board 單元：
   
   ```ts
   const univer = new Univer({
     locale: LocaleType.EN_US,
     locales: {
       [LocaleType.EN_US]: mergeLocales(
         DesignEnUS,
         UIEnUS,
         DocsUIEnUS,
         DrawingUIEnUS,
         InkUIZhTW,
         BoardsUIEnUS,
       ),
     },
   })
   
   univer.registerPlugin(UniverRenderEnginePlugin)
   univer.registerPlugin(UniverUIPlugin, { container: 'app' })
   univer.registerPlugin(UniverDocsPlugin)
   univer.registerPlugin(UniverDocsUIPlugin)
   univer.registerPlugin(UniverDrawingPlugin)
   univer.registerPlugin(UniverDrawingUIPlugin)
   univer.registerPlugin(UniverInkUIPlugin)
   univer.registerPlugin(UniverLicensePlugin, {
     license: process.env.CLIENT_LICENSE_TEXT,
   })
   univer.registerPlugin(UniverBoardsPlugin)
   univer.registerPlugin(UniverBoardsUIPlugin)
   
   univer.createUnit(UniverInstanceType.UNIVER_BOARD, {})
   
   const univerAPI = FUniver.newAPI(univer)
   ```

#### `univer.registerPlugin` 與 `univer.registerPlugins` 方法

`univer.registerPlugin` 用於將外掛註冊到 Univer 實例。可於建立實例後呼叫。

使用方式：`univer.registerPlugin(Plugin, options)`，其中 `Plugin` 為外掛類別，`options` 為該外掛的（可選）設定。

亦可透過 `univer.registerPlugins` 傳入陣列，一次性註冊多個外掛，便於集中管理：

```typescript
univer.registerPlugins([
  UniverRenderEnginePlugin,
  [UniverUIPlugin, { container: 'app' }],
  UniverDocsPlugin,
  UniverDocsUIPlugin,
  UniverDrawingPlugin,
  UniverDrawingUIPlugin,
  UniverInkUIPlugin,
  [UniverLicensePlugin, {
    license: process.env.CLIENT_LICENSE_TEXT,
  }],
  UniverBoardsPlugin,
  UniverBoardsUIPlugin,
])
```

`FUniver.newAPI(univer)` 傳回的 `univerAPI` 物件就是 Univer 的 Facade API。您可以使用它建立白板及操作白板元素。

## 行動裝置支援

> [!WARNING]
> 這些範例要求安裝的 SDK 套件包含下列行動版匯出。所有 `@univerjs/*` 與 `@univerjs-pro/*` 依賴應保持**相同版本**。
> 
> `1.0.0-rc.0` 尚未匯出 `UniverBoardsMobileUIPlugin`。使用以下範例前，請選擇已包含該行動版入口的建置版本。

在 Univer Boards 中使用**行動版 UI 外掛**提供觸控操作介面。[^mobile-ui-mode] 請在建立編輯器前選定 UI 模式。

在上方外掛模式範例中，**替換**以下 UI 外掛的匯入與註冊，並在 `createUnit()` 前完成；不要加到已初始化的桌面版編輯器中。保留模型外掛、引擎、語言套件、CSS 與 Facade 匯入。桌面版與行動版類別是**同一個套件入口**的不同具名匯出。

```typescript
import { UniverBoardsMobileUIPlugin } from '@univerjs-pro/boards-ui'
import { UniverDocsMobileUIPlugin } from '@univerjs/docs-ui'
import { UniverDrawingMobileUIPlugin } from '@univerjs/drawing-ui'
import { UniverMobileUIPlugin } from '@univerjs/ui'

univer.registerPlugin(UniverMobileUIPlugin, { container: 'app' })
univer.registerPlugin(UniverDocsMobileUIPlugin)
univer.registerPlugin(UniverDrawingMobileUIPlugin)
univer.registerPlugin(UniverBoardsMobileUIPlugin)
```

### 外掛對照

僅註冊所需功能，並保留其模型外掛與必要依賴。提供行動版 UI 匯出不代表兩端介面完全相同。Pro 功能仍需相應授權；需要後端的功能，請在業務應用程式中透過 [Univer Server SDK](https://docs.univer.ai/zh-TW/server.md) 接入相應能力。

| 套件                                       | 桌面版註冊                               | 行動版註冊                                     |
| ---------------------------------------- | ----------------------------------- | ----------------------------------------- |
| `@univerjs/ui`                           | `UniverUIPlugin`                    | `UniverMobileUIPlugin`                    |
| `@univerjs/docs-ui`                      | `UniverDocsUIPlugin`                | `UniverDocsMobileUIPlugin`                |
| `@univerjs/drawing-ui`                   | `UniverDrawingUIPlugin`             | `UniverDrawingMobileUIPlugin`             |
| `@univerjs-pro/boards-ui`                | `UniverBoardsUIPlugin`              | `UniverBoardsMobileUIPlugin`              |
| `@univerjs/thread-comment-ui`            | `UniverThreadCommentUIPlugin`       | `UniverThreadCommentMobileUIPlugin`       |
| `@univerjs-pro/shape-editor-ui`          | `UniverShapeEditorUIPlugin`         | `UniverShapeEditorMobileUIPlugin`         |
| `@univerjs-pro/chart-ui`                 | `UniverChartUIPlugin`               | `UniverChartMobileUIPlugin`               |
| `@univerjs-pro/exchange-client`          | `UniverExchangeClientPlugin`        | `UniverExchangeClientMobileUIPlugin`      |
| `@univerjs-pro/boards-chart-ui`          | `UniverBoardsChartUIPlugin`         | `UniverBoardsChartMobileUIPlugin`         |
| `@univerjs-pro/boards-mind-ui`           | `UniverBoardsMindUIPlugin`          | `UniverBoardsMindMobileUIPlugin`          |
| `@univerjs-pro/boards-resources-ui`      | `UniverBoardsResourcesUIPlugin`     | `UniverBoardsResourcesMobileUIPlugin`     |
| `@univerjs-pro/boards-table-ui`          | `UniverBoardsTableUIPlugin`         | `UniverBoardsTableMobileUIPlugin`         |
| `@univerjs-pro/boards-thread-comment-ui` | `UniverBoardsThreadCommentUIPlugin` | `UniverBoardsThreadCommentMobileUIPlugin` |

### 容器與觸控互動

為容器指定明確高度，並設定頁面 viewport。`100dvh` 隨動態視口高度變化。請在目標行動瀏覽器上檢查捲動、雙指縮放、文字選取、剪貼簿存取與螢幕鍵盤彈出後的版面。僅縮小桌面版編輯器不會切換至行動版外掛。

`UniverMobileUIPlugin` 預設使用 `disableAutoFocus: true`，避免編輯器在初始化時自動取得焦點。

```html
<meta name="viewport" content="width=device-width, initial-scale=1" />
<div id="app" style="height: 100dvh"></div>
```

## 選用功能套件

當 Board 編輯器需要對應的元素類型時，請加入相關功能套件：

```shell
pnpm add @univerjs-pro/boards-table @univerjs-pro/boards-table-ui
pnpm add @univerjs-pro/boards-mind @univerjs-pro/boards-mind-ui
```

如需功能註冊範例，請參閱[表格](https://docs.univer.ai/zh-TW/guides/boards/features/tables.md)、[心智圖](https://docs.univer.ai/zh-TW/guides/boards/features/mind-maps.md)和[匯入匯出](https://docs.univer.ai/zh-TW/guides/boards/features/import-export.md)。

## 其他發佈版本

除穩定版外，Univer 亦提供 alpha / beta 通道。這些版本可讓你搶先體驗未正式釋出的新功能；但請注意，功能更多同時代表風險更高，可能包含錯誤、未完成或不穩定特性。生產環境請謹慎使用。

### Alpha / Beta 版本

當團隊完成新功能或重大調整，可能會預先發佈於 alpha 或 beta 通道。可用以下指令安裝：

#### npm

```bash
npm install @univerjs-pro/boards@alpha # Alpha 版本
npm install @univerjs-pro/boards@beta # Beta 版本
```

#### pnpm

```bash
pnpm add @univerjs-pro/boards@alpha # Alpha 版本
pnpm add @univerjs-pro/boards@beta # Beta 版本
```

#### yarn

```bash
yarn add @univerjs-pro/boards@alpha # Alpha 版本
yarn add @univerjs-pro/boards@beta # Beta 版本
```

#### bun

```bash
bun add @univerjs-pro/boards@alpha # Alpha 版本
bun add @univerjs-pro/boards@beta # Beta 版本
```

若於使用 alpha / beta 過程遇到問題或有建議，歡迎透過 [GitHub Issues](https://github.com/dream-num/univer/issues) 回報。

祝你搶先體驗愉快！

## 下一步

* [快速入門](https://docs.univer.ai/zh-TW/guides/boards/getting-started/quickstart.md)
* [Facade API](https://docs.univer.ai/zh-TW/guides/boards/getting-started/facade.md)
* [授權設定](https://docs.univer.ai/zh-TW/server/license.md)
* [Server SDK 整合](https://docs.univer.ai/zh-TW/server.md)

[^peer-dependency]: `peerDependencies` 表示需要由宿主專案提供相容版本的相依套件，讓 Univer 與應用程式共用 React 等函式庫，而不是各自攜帶一份。

[^facade-entry]: Facade 是面向應用程式的 API，封裝已註冊外掛的能力。匯入 Facade 入口會擴充 API 方法，但不會取代功能外掛的註冊。

[^mobile-ui-mode]: 行動版 UI 外掛在初始化時選擇觸控元件與行動版服務，不會自動判斷裝置，也不會在視窗大小改變時切換既有實例。如需切換模式，請先保留文件狀態、銷毀舊實例，再以選定的外掛組合初始化。
