跳转至内容
There is a version suitable for your browser's language settings. Would you like to go to the english language of the site?
主页文档

配置

H1

在开发中,我们常常需要妥善管理各种配置信息,例如数据库连接细节、密钥等敏感数据。

通常,我们会将这些配置信息统一存储于工程的/src/config目录下。像下面这样:

/src/config/example.ts
export const configExample = defineConfig(({ config }) => {
return config({
foo: "bar",
}).done();
});

在此基础上,我们可以将配置对象轻松导入到任何需要的地方。我们约定俗成,所有配置对象的名称都以config为前缀,这样在代码编辑器中输入config时,就可以迅速找到所有可用的配置选项。

import { configExample } from "/src/config/example";
console.log(configExample.foo); // echo: "bar"

环境

也许我们在不同环境下,需要使用不同的值。例如,在生产环境中(即我们在云服务器上运行),我们可能需要使用内网的数据库连接地址,因为这样速度更快,也更加安全。我们可以通过指定环境来轻松实现这一点。

/src/config/example.ts
export const configExample = defineConfig(({ config, mode }) => {
return config({
foo: "bar",
})
.environment(() => env.NODE_ENV === "development", {
foo: "baz",
})
.environment(() => env.NODE_ENV === "production", {
foo: "qux",
})
.done();
});

environment 方法接收一个返回布尔值的方法作为第一个参数,当满足条件时,第二个参数中的对象将与你的配置进行浅层合并。

在上面的例子中,如果你在运行 Milkio 之前,执行了 export NODE_ENV=production,那么 configExample.foo 将会返回 "qux"

修改配置

配置并非是只读的,你可以任意修改配置对象。例如,像 Cloudflare Workers 或者一些其他边缘运行时,它们只有在请求到来时才能得知环境变量中的值,这时,你就可以在你的 /run-cloudflare.ts 或者其他运行时中,将配置对象中的值修改为需要的值。

import { configExample } from "/src/config/example";
configExample.foo = "qux";

异步配置

在某些情况下,你可能需要从远程服务器或者数据库、Redis 中获取配置信息。与 .env 这种纯文本形式的配置相比,我们的配置是真实运行在 JavaScript 中的,因此,我们可以直接将配置对象设置为 Promise,或者传入一个自执行方法,来获取配置信息。

/src/config/example.ts
export const configExample = defineConfig(({ config }) => {
return config({
foo: (async() => {
return await fetch(...)
})(),
bar: "baz"
}).done();
});

环境变量

环境变量是一种普遍的配置方法,但它不具备类型信息,因此我们获取的环境变量值都是字符串形式。为了帮助开发者将这些字符串转换为适当的数据类型,Milkio框架提供了相应的工具函数。这些函数允许你指定一个默认值,以防环境变量未定义时使用。

/src/config/example.ts
import { env } from "node:process";
import { envToBoolean, envToNumber, envToString } from "milkio";
export const configExample = {
fooNumber: envToNumber(env.FOO, 9000),
barBoolean: envToBoolean(env.BAR, false),
bazString: envToString(env.BAZ, "hello-world"),
};

.env 文件

一些环境支持使用 .env 文件来自动设置环境变量,例如 Bun。

此外,Bun 支持通过指定运行模式来使用不同的 .env 文件,这在本地开发和部署过程中特别有用。默认情况下,Bun会读取 .env 文件。若要在部署时使用另一组环境变量,可以设置环境变量 MODE 为相应的文件名,例如 .env.production,或者在执行命令时通过 --mode=.env.production 来实现相同的效果。

如果你正在使用 Node.js,dotenv 这个包可以帮助你实现类似的效果。

Milkio配置文件

在创建新工程时,Milkio框架会自动生成一个名为milkio.ts的配置文件,其中包含了与框架相关的配置选项。你可以根据需要自由修改这些配置,例如调整默认值。

名称环境变量描述
ignorePathLevelMILKIO_IGNORE_PATH_LEVEL忽略路径层级的数量,适用于某些Serverless服务部署时产生的额外路径问题
corsAllowMethodsMILKIO_CORS_ALLOW_METHODS设置浏览器预检请求允许的方法,默认为*
corsAllowHeadersMILKIO_CORS_ALLOW_HEADERS设置浏览器预检请求允许的头部,默认为*
corsAllowOriginMILKIO_CORS_ALLOW_ORIGIN设置浏览器预检请求允许的源,默认为*

通过这种方式,我们可以灵活地管理和配置我们的应用程序,确保其在不同环境下的正常运行。