框架
环境变量

环境变量

Plasmo 提供了对环境变量的一流支持。这使您可以根据每个浏览器和开发环境的需求自定义扩展程序,同时使用相同的代码库。

示例

内置环境变量

Plasmo 框架提供了以下内置客户端环境变量:

  • NODE_ENV: 根据构建命令为 developmentproduction
  • PLASMO_TARGET: 由 the --target flag 指定的目标,例如 chrome-mv3
  • PLASMO_BROWSER: 目标浏览器的名称,例如 chrome
  • PLASMO_MANIFEST_VERSION: 清单版本,例如 mv3mv2
  • PLASMO_TAG: 构建标签,例如 devprod 或通过 the --tag flag 指定的自定义标签

自定义环境变量

要添加扩展程序可访问的环境变量,请创建一个 .env 文件:

⚠️

只有以 PLASMO_PUBLIC_ 开头的环境变量才会被注入。

PLASMO_PUBLIC_SHIP_NAME=ncc-1701
PLASMO_PUBLIC_SHIELD_FREQUENCY=42
 
PRIVATE_KEY=xxx # 在扩展程序中未定义

NODE_ENV 特定环境

为了在 devbuild 之间分离环境变量,可以使用以下文件:

  • .env.development
  • .env.production

如果 .env.development 中有一个 CRX_PUBLIC_KEY 环境变量,但在 .env.production.env 中没有,则它仅在 plasmo dev 中可用,而不是在 plasmo build 中。

Bundle 特定环境

当创建最终包时,Plasmo 框架还提供特定于某些 build targetbuild tag 的环境变量。给定以下构建命令:

plasmo build --target=safari-mv3 --tag=alpha

将按优先级顺序考虑以下 env 文件:

  • .env.safari
  • .env.alpha
  • .env

本地环境

Plasmo 还支持以下环境文件名(Next.js 开发者会发现这些很熟悉):

  • .env.<browser>.local
  • .env.<tag>.local
  • .env.<NODE_ENV>.local
  • .env.local

.local 结尾的文件优先级高于非本地文件。例如,.env.local 的优先级高于 .env.production.env.development

在同一命名空间内,级联顺序如预期一样。此功能利用了使用 dotenv (opens in a new tab) 的环境变量级联/覆盖策略。

优先级环境

要包含优先级高于所有其他环境文件的环境文件,请使用 --env 标志。此文件的名称可以是任意名称:

plasmo build --env=.env.important

使用环境变量

环境变量是一个强大的功能,允许您根据每个浏览器和开发环境的需求自定义扩展程序,同时使用相同的代码库。

在源代码中

要在源代码中引用环境变量,请使用完整路径 process.env.<ENV_NAME>。例如:

// 对于 TSX (弹出窗口、选项页面):
const FrontHull = () => <h1>{process.env.PLASMO_PUBLIC_SHIP_NAME}</h1>
 
// 对于 TS (内容脚本或后台脚本):
const shield = new Shield(process.env.PLASMO_PUBLIC_SHIELD_FREQUENCY)
 
// 将为 undefined,因为它没有以 PLASMO_PUBLIC_ 开头
console.log(process.env.PRIVATE_KEY)

有关使用 .env 变量的更多详细信息,请参阅 with-env (opens in a new tab)

在远程代码导入中

如果您正在 导入远程代码,请使用公共环境变量:

import "https://www.plasmo.com/js?id=$PLASMO_PUBLIC_ITERO"

在内容脚本配置中

您还可以在 内容脚本配置导出 中使用环境变量:

export const config: PlasmoCSConfig = {
  matches: ["$PLASMO_PUBLIC_SITE_URL/"]
}

在清单覆盖中

Plasmo 允许您通过 package.json 文件中的 manifest 属性 覆盖最终生成的扩展程序清单。更进一步,Plasmo 还解析清单覆盖中使用的任何环境变量:

"manifest": {
  "key": "$CRX_PUBLIC_KEY"
}

您可以在清单覆盖中使用公共(以 PLASMO_PUBLIC 开头)和私有环境变量。 😎

⚠️

如果找不到环境变量,Plasmo 将省略该键。