Skip to main content
Version: 2.x

环境变量

在开发中经常会有一些需求,根据不同的环境进行不同的操作,比如 url 的替换,dev 环境在 dev 的 url,而线上使用 prd 的环境。在 Godzilla 的脚手架中就有这样的一个环境变量 process.env.NODE_ENV,如下使用(见 config/config.ts)。

apiConfig: {
isDebug: false,
proxyServer: '/',
base: process.env.NODE_ENV === 'development' ? 'http://127.0.0.1:8889' : '', // 开发模式下用http://127.0.0.1:8889这个地址,生产模式下为空(静态资源会部署在nginx上,用的是nginx的地址)
domain: {},
},

使用 config 中定义的环境变量

在 config/config.ts 中已经定义了一些环境变量,这些变量已经在项目中用上了,除此之外,还可以增加自己的环境变量,环境变量的命名一般是大写,然后在代码中直接使用即可。

definePlugin: {
ENABLE_SSO: false, // 是否只允许sso登录
APP_ID: JSON.stringify('portal'), // 应用ID
ENABLE_WEBSOCKET: false, // 是否支持websocket
PROJECT_NAME: JSON.stringify('Godzilla门户'), // 应用名称
}

环境变量在构建期间嵌入。由于 Create Godzilla App 生成静态的 HTML / CSS / JS 包,因此无法在 runtime(运行时) 读取它们。要在运行时读取它们,你需要将 HTML 加载到服务器上的内存中,并在运行时替换占位符 。或者,你可以随时在服务器上重建应用程序。

将在 process.env 上为你定义这些环境变量。例如,名为 SECRET_CODE 的环境变量将在你的 JS 中公开为 process.env.SECRET_CODE 。

还有一个名为 NODE_ENV 的特殊内置环境变量。你可以从 process.env.NODE_ENV 中读取它。当你运行 npm start 时,它总是等于 'development' ,,当你运行 npm run dist 来生成一个生产 dist(包) 时,它总是等于 'production' 。你无法手动覆盖 NODE_ENV。 这可以防止开发人员意外地将慢速开发构建部署到生产环境中。

首先,你需要定义环境变量。例如,假设你想要使用 <form> 中的环境中定义的 SECRET_CODE:

render() {
return (
<div>
<small>You are running this application in <b>{process.env.NODE_ENV}</b> mode.</small>
<form>
<input type="hidden" defaultValue={process.env.SECRET_CODE} />
</form>
</div>
);
}

在构建期间, process.env.SECRET_CODE 将替换为 SECRET_CODE 环境变量的当前值。请记住,将自动为你设置 NODE_ENV 变量。

当你在浏览器中加载应用程序并检查 <input> 时,你将看到其值设置为 abcdef ,粗体文本将显示使用 npm start 时提供的环境:

<div>
<small>
You are running this application in <b>development</b> mode.
</small>
<form>
<input type="hidden" value="abcdef" />
</form>
</div>

上面的表单正在从环境中查找名为 SECRET_CODE 的变量。

有权访问 NODE_ENV 对于有条件地执行操作也很有用:

if (process.env.NODE_ENV !== 'production') {
analytics.disable();
}

当你使用 npm run dist 编译应用程序时,压缩步骤将使用此条件,并且生成的 bundle(包) 将更小。