i18n - docs translations (#20778)

Created by Github action

Co-authored-by: github-actions <github-actions@twenty.com>
This commit is contained in:
github-actions[bot]
2026-05-20 19:28:51 +02:00
committed by GitHub
parent b869107a22
commit 3c458ce4ca
78 changed files with 570 additions and 570 deletions
@@ -45,7 +45,7 @@ export default definePostInstallLogicFunction({
你也可以随时使用 CLI 手动执行安装后函数:
```bash filename="Terminal"
yarn twenty exec --postInstall
yarn twenty dev:function:exec --postInstall
```
关键点:
@@ -60,7 +60,7 @@ yarn twenty exec --postInstall
* 每个应用仅允许一个安装后函数。 如果检测到多个,清单构建将报错。
* 构建期间,函数的 `universalIdentifier`、`shouldRunOnVersionUpgrade` 和 `shouldRunSynchronously` 会自动附加到应用清单的 `postInstallLogicFunction` 字段下——你无需在 [`defineApplication()`](/l/zh/developers/extend/apps/config/application) 中引用它们。
* 默认超时时间设置为 300 秒(5 分钟),以便支持更长的设置任务,如数据填充。
* **开发模式下不执行**:当应用在本地注册(通过 `yarn twenty dev`)时,服务器会完全跳过安装流程,并通过 CLI 监视器直接同步文件——因此无论 `shouldRunSynchronously` 如何,安装后在开发模式下都不会运行。 使用 `yarn twenty exec --postInstall` 在运行中的工作区上手动触发它。
* **开发模式下不执行**:当应用在本地注册(通过 `yarn twenty dev`)时,服务器会完全跳过安装流程,并通过 CLI 监视器直接同步文件——因此无论 `shouldRunSynchronously` 如何,安装后在开发模式下都不会运行。 使用 `yarn twenty dev:function:exec --postInstall` 在运行中的工作区上手动触发它。
</Accordion>
<Accordion title="definePreInstallLogicFunction" description="在应用工作区元数据迁移之前运行">
@@ -87,7 +87,7 @@ export default definePreInstallLogicFunction({
你也可以随时使用 CLI 手动执行安装前函数:
```bash filename="Terminal"
yarn twenty exec --preInstall
yarn twenty dev:function:exec --preInstall
```
关键点:
@@ -96,7 +96,7 @@ yarn twenty exec --preInstall
* **钩子何时运行**:位于工作区元数据迁移(`synchronizeFromManifest`)之前。 在执行之前,服务器会运行一次纯增量的“精简同步”,将**新**版本的安装前函数注册到工作区元数据中——不会触及其他任何内容——然后再执行它。 由于此次同步仅为增量操作,当你的处理程序运行时,上一版本的对象、字段和数据仍完好无损:你可以安全地读取并备份迁移前的状态。
* **执行模型**:安装前以**同步**方式执行,并且**会阻塞安装**。 如果处理程序抛出异常,安装会在任何架构更改应用之前被中止——工作区将保持在上一版本且处于一致状态。 这是有意为之:安装前是你拒绝高风险升级的最后机会。
* 与安装后相同,每个应用仅允许一个安装前函数。 在构建期间,它会自动附加到应用清单的 `preInstallLogicFunction` 下。
* **开发模式下不执行**:与安装后相同——对于本地注册的应用将完全跳过安装流程,因此在 `yarn twenty dev` 下不会运行安装前。 使用 `yarn twenty exec --preInstall` 手动触发它。
* **开发模式下不执行**:与安装后相同——对于本地注册的应用将完全跳过安装流程,因此在 `yarn twenty dev` 下不会运行安装前。 使用 `yarn twenty dev:function:exec --preInstall` 手动触发它。
</Accordion>
<Accordion title="安装前 vs 安装后:何时使用哪一个" description="选择合适的安装钩子">
@@ -13,7 +13,7 @@ icon: folder-open
* **在逻辑函数中可用**——在电子邮件、API 响应或任何服务端逻辑中引用资源 URL。
* **用于市场元数据**——`defineApplication()` 中的 `logoUrl` 和 `screenshots` 字段引用此文件夹中的文件(例如,`public/logo.png`)。 应用发布后,这些内容会显示在市场中。
* **在开发模式下自动同步**——当在 `public/` 中添加、更新或删除文件时,会自动同步到服务器。 无需重启。
* **包含在构建中**——`yarn twenty build` 会将所有公共资源打包到分发产物中。
* **包含在构建中**——`yarn twenty dev:build` 会将所有公共资源打包到分发产物中。
## 使用 `getPublicAssetUrl` 访问公共资源
@@ -80,7 +80,7 @@ export default defineObject({
* 每个字段都需要 `name`、`type`、`label` 以及其自身稳定的 `universalIdentifier`。
* `fields` 数组是可选的——你可以定义没有自定义字段的对象。
* 此处定义的内联字段**不**需要 `objectUniversalIdentifier`——它会从父对象继承。 使用[`defineField()`](/l/zh/developers/extend/apps/data/extending-objects)为你不拥有的对象添加字段。
* 你可以使用 `yarn twenty add object` 脚手架创建新对象,它会引导你完成命名、字段和关系。 参见 [Architecture → Scaffolding entities](/l/zh/developers/extend/apps/getting-started/scaffolding)。
* 你可以使用 `yarn twenty dev:add object` 脚手架创建新对象,它会引导你完成命名、字段和关系。 参见 [Architecture → Scaffolding entities](/l/zh/developers/extend/apps/getting-started/scaffolding)。
<Note>
**基础字段会自动添加。** 当你定义自定义对象时,Twenty 会为你创建标准字段,例如 `id`、`name`、`createdAt`、`updatedAt`、`createdBy`、`updatedBy` 和 `deletedAt`。 你无需在 `fields` 数组中声明这些字段——只需声明你的自定义字段。 你可以通过声明一个同名字段来覆盖默认字段,但这么做通常并不是一个好主意。
@@ -65,7 +65,7 @@ your-app/
│ npx create-twenty-app → yarn twenty dev (live sync) │
├─────────────────────────────────────────────────────────┤
│ Build & Deploy │
│ yarn twenty build → yarn twenty deploy
│ yarn twenty dev:build → yarn twenty app:publish
├─────────────────────────────────────────────────────────┤
│ Install flow │
│ upload → [pre-install] → metadata migration → │
@@ -77,7 +77,7 @@ your-app/
```
* **`yarn twenty dev`** — 监视你的源文件,并将更改实时同步到已连接的 Twenty 服务器。 当模式发生变化时,会自动重新生成类型化的 API 客户端。
* **`yarn twenty build`** — 编译 TypeScript,使用 esbuild 打包逻辑函数和前端组件,并生成清单。
* **`yarn twenty dev:build`** — 编译 TypeScript,使用 esbuild 打包逻辑函数和前端组件,并生成清单。
* **预/后安装钩子** — 在安装过程中运行的可选函数。 详见 [安装钩子](/l/zh/developers/extend/apps/config/install-hooks)。
## 后续步骤
@@ -6,44 +6,44 @@ icon: server
## 管理本地服务器
使用 `yarn twenty server` 控制本地的 Twenty 容器:
使用 `yarn twenty docker:*` 控制本地的 Twenty 容器:
| 命令 | 作用 |
| -------------------------------------- | ------------------------- |
| `yarn twenty server start` | 启动服务器(按需拉取镜像) |
| `yarn twenty server start --port 3030` | 在自定义端口启动 |
| `yarn twenty server stop` | 停止服务器(保留数据) |
| `yarn twenty server status` | 显示 URL、版本和登录凭据 |
| `yarn twenty server logs` | 流式输出服务器日志 |
| `yarn twenty server reset` | 清空数据并全新开始 |
| `yarn twenty server upgrade` | 拉取最新的 `twenty-app-dev` 镜像 |
| `yarn twenty server upgrade 2.2.0` | 升级到指定版本 |
| `yarn twenty docker:start` | 启动服务器(按需拉取镜像) |
| `yarn twenty docker:start --port 3030` | 在自定义端口启动 |
| `yarn twenty docker:stop` | 停止服务器(保留数据) |
| `yarn twenty docker:status` | 显示 URL、版本和登录凭据 |
| `yarn twenty docker:logs` | 流式输出服务器日志 |
| `yarn twenty docker:reset` | 清空数据并全新开始 |
| `yarn twenty docker:upgrade` | 拉取最新的 `twenty-app-dev` 镜像 |
| `yarn twenty docker:upgrade 2.2.0` | 升级到指定版本 |
数据在重启后会保留,存储于两个 Docker 卷中(`twenty-app-dev-data` 用于 PostgreSQL`twenty-app-dev-storage` 用于文件)。 使用 `reset` 清空所有内容。
## 升级服务器镜像
`yarn twenty server upgrade` 将拉取最新镜像、比较摘要,并且仅在确有变更时才重新创建容器。 数据卷将被保留——只会替换容器。 如果已拉取新镜像且容器正在运行,升级会自动启动一个新容器;之后运行 `yarn twenty server start` 以等待其变为健康状态。
`yarn twenty docker:upgrade` 将拉取最新镜像、比较摘要,并且仅在确有变更时才重新创建容器。 数据卷将被保留——只会替换容器。 如果已拉取新镜像且容器正在运行,升级会自动启动一个新容器;之后运行 `yarn twenty docker:start` 以等待其变为健康状态。
```bash filename="Terminal"
yarn twenty server upgrade # Latest
yarn twenty server upgrade 2.2.0 # Specific version
yarn twenty docker:upgrade # Latest
yarn twenty docker:upgrade 2.2.0 # Specific version
```
使用 `yarn twenty server status` 验证正在运行的版本(它会显示写入容器的 `APP_VERSION`)。
使用 `yarn twenty docker:status` 验证正在运行的版本(它会显示写入容器的 `APP_VERSION`)。
## 运行并行测试实例
向任意 `server` 命令传递 `--test` 以管理第二个、完全隔离的实例——这有助于在不影响主开发数据的情况下进行集成测试或试验:
向任意 `docker:*` 命令传递 `--test` 以管理第二个、完全隔离的实例——这有助于在不影响主开发数据的情况下进行集成测试或试验:
| 命令 | 作用 |
| ----------------------------------- | ------------------- |
| `yarn twenty server start --test` | 启动测试实例 (默认端口为 2021) |
| `yarn twenty server stop --test` | 停止它 |
| `yarn twenty server status --test` | 显示其状态 |
| `yarn twenty server logs --test` | 流式输出其日志 |
| `yarn twenty server reset --test` | 清空其数据 |
| `yarn twenty server upgrade --test` | 升级其镜像 |
| `yarn twenty docker:start --test` | 启动测试实例 (默认端口为 2021) |
| `yarn twenty docker:stop --test` | 停止它 |
| `yarn twenty docker:status --test` | 显示其状态 |
| `yarn twenty docker:logs --test` | 流式输出其日志 |
| `yarn twenty docker:reset --test` | 清空其数据 |
| `yarn twenty docker:upgrade --test` | 升级其镜像 |
测试实例有其自己的容器(`twenty-app-dev-test`)、卷(`twenty-app-dev-test-data`、`twenty-app-dev-test-storage`)和配置——它可与你的主实例并行运行且不会发生冲突。 将 `--test` 与 `--port` 组合使用以覆盖 2021 端口。
@@ -65,7 +65,7 @@ yarn add twenty-sdk twenty-client-sdk
}
```
现在你可以运行 `yarn twenty dev`、`yarn twenty server start`,以及其他命令。
现在你可以运行 `yarn twenty dev`、`yarn twenty docker:start`,以及其他命令。
<Note>
不要全局安装 `twenty-sdk` —— 在每个项目中固定其版本,使每个应用都使用各自的版本。
@@ -43,7 +43,7 @@ npx create-twenty-app@latest my-twenty-app
> **是否要设置本地 Twenty 实例?**
* **是(推荐)** — 将拉取 `twentycrm/twenty-app-dev` Docker 镜像,并在端口 `2020` 上启动它。 请先确保 Docker 正在运行。
* **否** — 如果你已经有一个想要连接的 Twenty 服务器,请选择此项。 你可以稍后通过 `yarn twenty remote add` 将其连接起来。
* **否** — 如果你已经有一个想要连接的 Twenty 服务器,请选择此项。 你可以稍后通过 `yarn twenty remote:add` 将其连接起来。
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/start-instance.png" alt="是否启动本地实例?" />
@@ -73,7 +73,7 @@ npx create-twenty-app@latest my-twenty-app
**完成此阶段后:** 你在 [http://localhost:2020](http://localhost:2020) 上拥有一个正在运行的 Twenty 服务器,且你的 CLI 已获授权可与其同步。
<Note>
如果未安装或未运行 Docker,脚手架工具会告诉你在所用操作系统上正确的启动命令。 Docker 启动后,你可以通过 `yarn twenty server start` 继续——无需重新生成脚手架。
如果未安装或未运行 Docker,脚手架工具会告诉你在所用操作系统上正确的启动命令。 Docker 启动后,你可以通过 `yarn twenty docker:start` 继续——无需重新生成脚手架。
</Note>
---
@@ -1,13 +1,13 @@
---
title: 脚手架
description: 通过 yarn twenty add 以交互方式生成实体文件——对象、字段、视图、逻辑函数等。
description: 通过 yarn twenty dev:add 以交互方式生成实体文件——对象、字段、视图、逻辑函数等。
icon: wand-magic-sparkles
---
无需手动创建实体文件,使用交互式脚手架:
```bash filename="Terminal"
yarn twenty add
yarn twenty dev:add
```
它会提示你选择一个实体类型,引导你填写所需字段,然后生成一个可直接使用的文件,其中包含稳定的 `universalIdentifier` 和正确的 `defineEntity()` 调用。
@@ -15,29 +15,29 @@ yarn twenty add
你也可以直接传入实体类型以跳过第一个提示:
```bash filename="Terminal"
yarn twenty add object
yarn twenty add logicFunction
yarn twenty add frontComponent
yarn twenty dev:add object
yarn twenty dev:add logicFunction
yarn twenty dev:add frontComponent
```
## 可用的实体类型
| 实体类型 | 命令 | 生成的文件 |
| ----- | ------------------------------------ | ------------------------------------------------------- |
| 对象 | `yarn twenty add object` | `src/objects/\<name>.ts` |
| 字段 | `yarn twenty add field` | `src/fields/\<name>.ts` |
| 逻辑函数 | `yarn twenty add logicFunction` | `src/logic-functions/\<name>.ts` |
| 前端组件 | `yarn twenty add frontComponent` | `src/front-components/\<name>.tsx` |
| 角色 | `yarn twenty add role` | `src/roles/\<name>.ts` |
| 技能 | `yarn twenty add skill` | `src/skills/\<name>.ts` |
| 代理 | `yarn twenty add agent` | `src/agents/\<name>.ts` |
| 视图 | `yarn twenty add view` | `src/views/\<name>.ts` |
| 导航菜单项 | `yarn twenty add navigationMenuItem` | `src/navigation-menu-items/\<name>.ts` |
| 页面布局 | `yarn twenty add pageLayout` | `src/page-layouts/\<name>.ts` |
| 实体类型 | 命令 | 生成的文件 |
| ----- | ---------------------------------------- | ------------------------------------------------------- |
| 对象 | `yarn twenty dev:add object` | `src/objects/\<name>.ts` |
| 字段 | `yarn twenty dev:add field` | `src/fields/\<name>.ts` |
| 逻辑函数 | `yarn twenty dev:add logicFunction` | `src/logic-functions/\<name>.ts` |
| 前端组件 | `yarn twenty dev:add frontComponent` | `src/front-components/\<name>.tsx` |
| 角色 | `yarn twenty dev:add role` | `src/roles/\<name>.ts` |
| 技能 | `yarn twenty dev:add skill` | `src/skills/\<name>.ts` |
| 代理 | `yarn twenty dev:add agent` | `src/agents/\<name>.ts` |
| 视图 | `yarn twenty dev:add view` | `src/views/\<name>.ts` |
| 导航菜单项 | `yarn twenty dev:add navigationMenuItem` | `src/navigation-menu-items/\<name>.ts` |
| 页面布局 | `yarn twenty dev:add pageLayout` | `src/page-layouts/\<name>.ts` |
## 脚手架生成的内容
每种实体类型都有其自己的模板。 例如,`yarn twenty add object` 会询问:
每种实体类型都有其自己的模板。 例如,`yarn twenty dev:add object` 会询问:
1. **名称(单数)**——例如,`invoice`
2. **名称(复数)**——例如,`invoices`
@@ -54,5 +54,5 @@ yarn twenty add frontComponent
使用 `--path` 标志将生成的文件放置在自定义位置:
```bash filename="Terminal"
yarn twenty add logicFunction --path src/custom-folder
yarn twenty dev:add logicFunction --path src/custom-folder
```
@@ -4,7 +4,7 @@ description: 常见的首次运行问题 — Docker、Node 版本、Yarn、依
icon: wrench
---
* **Docker 错误** — 在运行 `yarn twenty server start` 之前,请确保 Docker Desktop(或守护进程)已在运行。 错误消息会显示适用于你的操作系统的正确启动命令。
* **Docker 错误** — 在运行 `yarn twenty docker:start` 之前,请确保 Docker Desktop(或守护进程)已在运行。 错误消息会显示适用于你的操作系统的正确启动命令。
* **Node 版本不正确** — 需要 24+。 使用 `node -v` 检查。
* **缺少 Yarn 4** — 运行 `corepack enable`。
* **依赖损坏** — `rm -rf node_modules && yarn install`。
@@ -61,17 +61,17 @@ export default defineLogicFunction({
你也可以使用 CLI 手动执行函数:
```bash filename="Terminal"
yarn twenty exec -n create-new-post-card -p '{"key": "value"}'
yarn twenty dev:function:exec -n create-new-post-card -p '{"key": "value"}'
```
```bash filename="Terminal"
yarn twenty exec -y e56d363b-0bdc-4d8a-a393-6f0d1c75bdcf
yarn twenty dev:function:exec -u e56d363b-0bdc-4d8a-a393-6f0d1c75bdcf
```
你可以通过以下方式查看日志:
```bash filename="Terminal"
yarn twenty logs
yarn twenty dev:function:logs
```
</Note>
@@ -341,7 +341,7 @@ export default defineLogicFunction({
<AccordionGroup>
<Accordion title="CoreApiClient" description="查询和变更工作区数据(记录、对象)">
`CoreApiClient` 是用于查询和变更工作区数据的主要客户端。 它会在执行 `yarn twenty dev` 或 `yarn twenty build` 时**根据你的工作区架构生成**,因此完全类型化以匹配你的对象和字段。
`CoreApiClient` 是用于查询和变更工作区数据的主要客户端。 它会在执行 `yarn twenty dev` 或 `yarn twenty dev:build` 时**根据你的工作区架构生成**,因此具有完整的类型定义以匹配你的对象和字段。
```ts
import { CoreApiClient } from 'twenty-client-sdk/core';
@@ -381,7 +381,7 @@ const { createCompany } = await client.mutation({
该客户端使用选择集语法:传入 `true` 以包含某字段,使用 `__args` 传递参数,并通过嵌套对象表示关系。 你将基于工作区架构获得完整的自动补全和类型检查。
<Note>
**CoreApiClient 在开发/构建时生成。** 如果在未先运行 `yarn twenty dev` 或 `yarn twenty build` 的情况下尝试使用它,将会抛出错误。 该生成过程是自动完成的——CLI 会自省你的工作区 GraphQL 架构,并使用 `@genql/cli` 生成类型化客户端。
**CoreApiClient 在开发/构建时生成。** 如果在未先运行 `yarn twenty dev` 或 `yarn twenty dev:build` 的情况下尝试使用它,将会抛出错误。 该生成过程是自动完成的——CLI 会自省你的工作区 GraphQL 架构,并使用 `@genql/cli` 生成类型化客户端。
</Note>
#### 使用 CoreSchema 进行类型标注
@@ -4,54 +4,54 @@ description: yarn twenty 命令可用于执行函数、流式传输日志、管
icon: terminal
---
除了 `dev`、`build`、`add` 和 `typecheck` 外,`yarn twenty` CLI 还提供了用于执行函数、查看日志和管理应用安装的命令。
除了 `dev`、`dev:build`、`dev:add` 和 `dev:typecheck` 外,`yarn twenty` CLI 还提供了用于执行函数、查看日志和管理应用安装的命令。
## 执行函数(`yarn twenty exec`
## 执行函数(`yarn twenty dev:function:exec`
手动运行逻辑函数,而无需通过 HTTP、定时任务或数据库事件来触发:
```bash filename="Terminal"
# Execute by function name
yarn twenty exec -n create-new-post-card
yarn twenty dev:function:exec -n create-new-post-card
# Execute by universalIdentifier
yarn twenty exec -u e56d363b-0bdc-4d8a-a393-6f0d1c75bdcf
yarn twenty dev:function:exec -u e56d363b-0bdc-4d8a-a393-6f0d1c75bdcf
# Pass a JSON payload
yarn twenty exec -n create-new-post-card -p '{"name": "Hello"}'
yarn twenty dev:function:exec -n create-new-post-card -p '{"name": "Hello"}'
# Execute the post-install function
yarn twenty exec --postInstall
yarn twenty dev:function:exec --postInstall
```
## 查看函数日志(`yarn twenty logs`
## 查看函数日志(`yarn twenty dev:function:logs`
实时流式查看你的应用逻辑函数的执行日志:
```bash filename="Terminal"
# Stream all function logs
yarn twenty logs
yarn twenty dev:function:logs
# Filter by function name
yarn twenty logs -n create-new-post-card
yarn twenty dev:function:logs -n create-new-post-card
# Filter by universalIdentifier
yarn twenty logs -u e56d363b-0bdc-4d8a-a393-6f0d1c75bdcf
yarn twenty dev:function:logs -u e56d363b-0bdc-4d8a-a393-6f0d1c75bdcf
```
<Note>
这与 `yarn twenty server logs` 不同,后者显示的是 Docker 容器日志。 `yarn twenty logs` 会显示来自 Twenty 服务器的应用函数执行日志。
这与 `yarn twenty docker:logs` 不同,后者显示的是 Docker 容器日志。 `yarn twenty dev:function:logs` 会显示来自 Twenty 服务器的应用函数执行日志。
</Note>
## 卸载应用(`yarn twenty uninstall`
## 卸载应用(`yarn twenty app:uninstall`
将你的应用从活动工作区中移除:
```bash filename="Terminal"
yarn twenty uninstall
yarn twenty app:uninstall
# Skip the confirmation prompt
yarn twenty uninstall --yes
yarn twenty app:uninstall --yes
```
## 管理远程
@@ -60,19 +60,19 @@ yarn twenty uninstall --yes
```bash filename="Terminal"
# Add a new remote (opens a browser for OAuth login)
yarn twenty remote add
yarn twenty remote:add
# Connect to a local Twenty server (auto-detects port 2020 or 3000)
yarn twenty remote add --local
yarn twenty remote:add --local
# Add a remote non-interactively (useful for CI)
yarn twenty remote add --api-url https://your-twenty-server.com --api-key $TWENTY_API_KEY --as my-remote
yarn twenty remote:add --url https://your-twenty-server.com --api-key $TWENTY_API_KEY --as my-remote
# List all configured remotes
yarn twenty remote list
yarn twenty remote:list
# Switch the active remote
yarn twenty remote switch <name>
# Set the active remote
yarn twenty remote:use <name>
```
你的凭据存储在 `~/.twenty/config.json` 中。
@@ -9,9 +9,9 @@ icon: rocket
```text
develop ─▶ test ─▶ build ─▶ deploy / publish
─────── ──── ───── ─────────────────
yarn yarn yarn yarn twenty deploy (tarball → one server)
yarn yarn yarn yarn twenty app:publish --private (tarball → one server)
twenty test twenty
dev build yarn twenty publish (npm → marketplace)
dev dev:build yarn twenty app:publish (npm → marketplace)
```
## 本节内容
@@ -18,10 +18,10 @@ description: 将你的 Twenty 应用分发到应用市场,或进行内部部
运行构建命令来编译你的应用,并生成适用于分发的 `manifest.json`
```bash filename="Terminal"
yarn twenty build
yarn twenty dev:build
```
这会编译 TypeScript 源码,转译逻辑函数和前端组件,并将所有内容写入 `.twenty/output/`。 添加 `--tarball`,还可以生成用于手动分发或 deploy 命令的 `.tgz` 包。
这会编译 TypeScript 源码,转译逻辑函数和前端组件,并将所有内容写入 `.twenty/output/`。 添加 `--tarball`,还可以生成用于手动分发或 publish 命令的 `.tgz` 包。
## 部署到服务器(tar 包)
@@ -34,7 +34,7 @@ yarn twenty build
添加远程:
```bash filename="Terminal"
yarn twenty remote add --api-url https://your-twenty-server.com --as production
yarn twenty remote:add --url https://your-twenty-server.com --as production
```
### 部署
@@ -42,9 +42,9 @@ yarn twenty remote add --api-url https://your-twenty-server.com --as production
一步构建并将你的应用上传到服务器:
```bash filename="Terminal"
yarn twenty deploy
yarn twenty app:publish --private
# To deploy to a specific remote:
# yarn twenty deploy --remote production
# yarn twenty app:publish --private --remote production
```
### 共享已部署的应用
@@ -68,7 +68,7 @@ yarn twenty deploy
要发布更新:
1. 将 `package.json` 中的 `version` 字段递增(例如:`1.2.3` → `1.2.4`、`1.3.0` 或 `2.0.0`
2. 运行 `yarn twenty deploy`(或 `yarn twenty deploy --remote production`
2. 运行 `yarn twenty app:publish --private`(或 `yarn twenty app:publish --private --remote production`
3. 已安装该应用的工作区会在其设置中看到可用的升级
<Note>
@@ -121,7 +121,7 @@ yarn twenty deploy
**作用:**
1. 检出你的应用源代码。
2. 使用 `twentyhq/twenty/.github/actions/spawn-twenty-app-dev-test@main` 组合 action 启动一个隔离的 Twenty 测试实例(相当于 CI 中的 `yarn twenty server start --test`)。
2. 使用 `twentyhq/twenty/.github/actions/spawn-twenty-app-dev-test@main` 组合 action 启动一个隔离的 Twenty 测试实例(相当于 CI 中的 `yarn twenty docker:start --test`)。
3. 启用 Corepack,从你的 `.nvmrc` 设置 Node.js,并使用 `yarn install --immutable` 安装依赖。
4. 运行 `yarn test`,并从启动的实例传入 `TWENTY_API_URL` 和 `TWENTY_API_KEY`,以便你的测试可以与真实服务器通信。
@@ -139,7 +139,7 @@ yarn twenty deploy
**作用:**
1. 检出 PR 的 head(针对已加标签的 PR),或被推送的提交。
2. 运行 `twentyhq/twenty/.github/actions/deploy-twenty-app@main`——相当于 CI 中的 `yarn twenty deploy`。
2. 运行 `twentyhq/twenty/.github/actions/deploy-twenty-app@main`——相当于 CI 中的 `yarn twenty app:publish --private`。
3. 运行 `twentyhq/twenty/.github/actions/install-twenty-app@main`,将新部署的版本安装到目标工作区。
**必需的配置:**
@@ -208,13 +208,13 @@ export default defineApplication({
### 发布
```bash filename="Terminal"
yarn twenty publish
yarn twenty app:publish
```
要在特定的 dist-tag(例如 `beta` 或 `next`)下发布:
```bash filename="Terminal"
yarn twenty publish --tag beta
yarn twenty app:publish --tag beta
```
### 应用市场的发现机制如何运作
@@ -224,9 +224,9 @@ Twenty 服务器会**每小时**从 npm 注册表同步其市场目录。
你可以立即触发同步,而无需等待:
```bash filename="Terminal"
yarn twenty server catalog-sync
yarn twenty dev:catalog-sync
# To target a specific remote:
# yarn twenty server catalog-sync --remote production
# yarn twenty dev:catalog-sync --remote production
```
市场中显示的元数据来自你的 `defineApplication()` 配置——例如 `displayName`、`description`、`author`、`category`、`logoUrl`、`screenshots`、`aboutDescription`、`websiteUrl` 和 `termsUrl` 等字段。
@@ -259,12 +259,12 @@ jobs:
node-version: "24"
registry-url: https://registry.npmjs.org
- run: yarn install --immutable
- run: npx twenty build
- run: npx twenty dev:build
- run: npm publish --provenance --access public
working-directory: .twenty/output
```
对于其他 CI 系统(GitLab CI、CircleCI 等),同样适用以下三条命令:`yarn install`、`yarn twenty build`,然后在 `.twenty/output` 目录下执行 `npm publish`。
对于其他 CI 系统(GitLab CI、CircleCI 等),同样适用以下三条命令:`yarn install`、`yarn twenty dev:build`,然后在 `.twenty/output` 目录下执行 `npm publish`。
<Note>
**npm provenance** 可选,但建议启用。 使用 `--provenance` 发布会在你的 npm 列表中添加可信徽章,使用户可以验证该包是由公共 CI 流水线中的特定提交构建的。 有关设置说明,请参见 [npm provenance 文档](https://docs.npmjs.com/generating-provenance-statements)。
@@ -281,7 +281,7 @@ jobs:
你也可以通过命令行安装应用:
```bash filename="Terminal"
yarn twenty install
yarn twenty app:install
```
<Note>
@@ -290,5 +290,5 @@ yarn twenty install
* 尝试安装与工作区中已安装版本相同的版本将被拒绝,并返回 `APP_ALREADY_INSTALLED` 错误。
* 尝试安装低于当前已安装版本的版本将被拒绝,并返回 `CANNOT_DOWNGRADE_APPLICATION` 错误。
若要安装较新的版本,请先部署或发布它,然后重新运行 `yarn twenty install`。
若要安装较新的版本,请先部署或发布它,然后重新运行 `yarn twenty app:install`。
</Note>
@@ -235,7 +235,7 @@ yarn test:watch
你也可以在不运行测试的情况下对应用进行类型检查:
```bash filename="Terminal"
yarn twenty typecheck
yarn twenty dev:typecheck
```
这会运行 `tsc --noEmit` 并报告所有类型错误。