# react-native: 生产环境与开发环境 URL: https://generaltranslation.com/zh/docs/react-native/concepts/environments.mdx --- title: 生产环境与开发环境 description: 生产环境与开发环境的区别 --- {/* 自动生成:请勿直接编辑。请改为编辑 content/docs-templates/ 中的模板。 */} ## 概述 `gt-react-native` 的行为会因 React 应用所处的运行环境而有所不同。 它通过检查 `NODE_ENV` 环境变量来识别当前环境。 ## 生产环境行为 ### 环境变量 在生产环境中,唯一受支持的环境变量是 `GT_PROJECT_ID` (或其带前缀的版本,例如 `NEXT_PUBLIC_GT_PROJECT_ID`) 。 如果通过环境变量提供 API 密钥,`gt-react-native` 会抛出错误,以防 API 密钥暴露给客户端。 ### 翻译加载行为 在生产环境中,`gt-react-native` 的 provider 默认会尝试从 General Translation CDN 加载翻译。 如果你已通过 `loadTranslations` 函数配置了自定义的翻译加载方式 (例如加载本地翻译) ,`gt-react-native` 将改为使用该方式。 由于当前处于生产环境,翻译热重载已被禁用。 ## 开发环境行为 ### 环境变量 由于开发环境仅在本地运行,不会暴露给外部用户,因此 `gt-react-native` 会接受任何 General Translation 环境变量,即使它们带有 `NEXT_PUBLIC_`、`VITE_` (或类似) 前缀。 ### 翻译加载行为 在开发环境中,`gt-react-native` Provider 会先尝试以与生产环境相同的方式加载翻译。 这些翻译会加载到内存中。 当以非默认语言渲染组件 (使用 `useGT`、`` 或 `useTranslations`) 时,`gt-react-native` Provider 会执行以下操作: 1. 如果检测到给定内容已有有效的已存储翻译,则渲染该翻译。 2. 如果未找到翻译,则会尝试通过 General Translation API 动态翻译该内容。 3. 翻译完成后,会渲染译文,并将其存储在内存中以供后续使用。 4. 如果翻译超时,则会回退为渲染原始内容。 我们的 API 也会在内部对开发环境中的翻译进行短时间缓存,因此如果再次请求相同的翻译,会直接从缓存中返回。 这些翻译在项目级别彼此隔离,因此不会与其他项目的翻译混淆。 此外,该缓存仅针对开发会话,因此生产环境不会使用这些缓存的翻译。 `gt-react-native` 会检测使用 `useGT`、`` 或 `useTranslations` 的组件变更,并通过我们的 API 动态翻译修改后的内容。 ## 生产环境与开发环境 API 密钥 [#api-keys] 为了更清楚地区分 `gt-react-native` 在生产环境和开发环境下的行为,我们引入了“生产环境 API 密钥”和“开发环境 API 密钥”这两个概念。 ### 生产 API 密钥 生产 API 密钥是以 `gtx-api-` 开头的 API 密钥。 提供生产 API 密钥后,`gt-react-native` 的行为将与[生产环境行为](#production-behavior)一节中的说明一致。 这意味着,如果你在开发模式下运行 React 应用,并提供了生产 API 密钥,`gt-react-native` 会像在生产环境中一样运行。 翻译热重载会被禁用,而没有翻译的组件会渲染原始内容。 除此之外,`gt-react-native` 不会以任何方式使用这个生产 API 密钥。 我们之所以要求你在发布到生产环境时单独创建一个生产 API 密钥,是因为 CLI 工具只会访问生产 API 密钥。 CLI 工具会按“production”类别进行计费和速率限制。 ### 开发 API 密钥 开发 API 密钥是指以 `gtx-dev-` 开头的 API 密钥。 提供开发 API 密钥后,`gt-react-native` 将按[开发环境行为](#development-behavior)部分中的说明运行。 使用开发 API 密钥时,计费和速率限制会按“development”类别执行。 使用开发 API 密钥创建的翻译不会被存储,也不能在生产环境中使用。 开发翻译的目的是让您在发布到生产环境之前测试应用程序。