#env-var #variables #env-file #environment #env #validate #validation

bin+lib vnv

🔒 用于在 .env 文件内验证环境变量的增强装饰器语法

4 个版本

0.1.3 2024年5月24日
0.1.2 2024年5月24日
0.1.1 2024年5月24日
0.1.0 2024年5月6日

##263 in 配置

MIT 许可证

110KB
2.5K SLoC

vnv

增强 .env 语法的装饰器,用于验证您的环境变量。

# linux / windows
npm install @iedan/vnv

# linux / windows/ mac
cargo install vnv

示例

验证一组电话号码

@matches("[0-9]{3}-[0-9]{3}-[0-9]{4}")
CALL_LIST=["333-333-3333", "111-111-1111"]

为开发或生产使用不同的 API

@dev
@min(9)
API_URL="http://localhost:7301"

@dev
@min(10)
@startsWith("https://")
@doesNotMatch("localhost")
API_URL="https://my-domain.dev"

入门

  1. 下载源代码并编译二进制文件。

  2. 将系统路径变量设置为指向二进制文件。

  3. 使用 vnv --version 检查您是否已正确配置。

  4. 在此 下载 VS Code 扩展以实现语法高亮。

  5. 运行 vnv init 以设置配置文件和可选的模板文件。

  6. 运行 vnv check 以验证您的环境变量

  7. 运行 vnv build.vnv 文件构建为 .env 文件

变量类型

目前 valid-env 支持 4 种不同的环境变量类型。

  • 字符串
  • 数字
  • 字符串数组
  • 数字数组

为了简化对最终用户的体验,所有数字都是 64 位浮点整数。

增强装饰器

valid-env 通过扩展 .env 语法并添加装饰器,允许您验证和限定您的环境变量。

装饰器

@public

将环境变量的作用域更改为 公共

用法

@public
PORT=3000

允许的变量类型

  • 字符串
  • 数字
  • 字符串数组
  • 数字数组

@private

这并不是必要的,因为默认情况下所有变量都是 私有的,但可能有助于标注变量隐私的重要性。

用法

@private
SECRET="this is a super private secret"

允许的变量类型

  • 字符串
  • 数字
  • 字符串数组
  • 数字数组

@dev

将环境变量的环境更改为 开发

用法

@dev
PORT=3000

允许的变量类型

  • 字符串
  • 数字
  • 字符串数组
  • 数字数组

@prod

将环境变量的环境更改为 生产

用法

@prod
PORT=3000

允许的变量类型

  • 字符串
  • 数字
  • 字符串数组
  • 数字数组

@min

允许您验证变量的最小长度或大小。对于数字类型,它将验证数字的大小。对于字符串类型,它将验证长度。

用法

@min(1000)
POLLING_INTERVAL=5000
@min(10)
DOMAIN="https://google.com"
@min(1024)
MICROSERVICE_PORTS=[8080, 8081, 8082]
@min(5)
ADMIN_EMAILS=["[email protected]", "[email protected]"]

允许的变量类型

  • 字符串
  • 数字
  • 字符串数组
  • 数字数组

@max

允许您验证变量的最大长度或大小。对于数字类型,它将验证数字的大小。对于字符串类型,它将验证长度。

用法

@max(45000)
POLLING_INTERVAL=5000
@max(25)
APP_NAME="super-powered-app"
@max(49151)
MICROSERVICE_PORTS=[8080, 8081, 8082]
@max(254)
ADMIN_EMAILS=["[email protected]", "[email protected]"]

允许的变量类型

  • 字符串
  • 数字
  • 字符串数组
  • 数字数组

@startsWith

允许您验证字符串变量的开始。

用法

@startsWith("https://")
DOMAIN="https://google.com"
@startsWith("https://")
ALLOWED_ORIGINS=["https://google.com", "https://github.com"]

允许的变量类型

  • 字符串
  • 字符串数组

@endsWith

允许您验证字符串变量的结束。

用法

@endsWith("@gmail.com")
EMAIL="[email protected]"
@endsWith("@gmail.com")
ALLOWED_ORIGINS=["[email protected]", "[email protected]"]

允许的变量类型

  • 字符串
  • 字符串数组

@matches

启用基于正则表达式的模式匹配来验证字符串变量。当模式不匹配时将返回错误。

用法

# Digits only regex
@matches("^\d+$")
PHONE_NUMBER="4427211223"
@matches("^\d+$")
PHONE_NUMBERS=["4427211223", "4427511227", "4428211213"]

允许的变量类型

  • 字符串
  • 字符串数组

@doesNotMatch

启用基于正则表达式的模式匹配来验证字符串变量。当模式匹配时将返回错误。

用法

# Special characters regex
@doesNotMatch("[^\w.]")
SUPER_USER="admin"
@doesNotMatch("[^\w.]")
ADMIN_USERNAMES=["johnothy", "jimnothy"]

允许的变量类型

  • 字符串
  • 字符串数组

公共和私有

一些环境变量处理器允许您将变量范围设置为公共或私有。(例如 SvelteKit)。这允许您在服务器和客户端代码之间分离对环境变量的使用权限。默认情况下,所有变量都是私有范围,但可以使用 @public 装饰器标记为公共。

注意:尽管 @private 装饰器是有效的语法并且列在装饰器中,但它不会改变变量的范围。然而,它可以用于注释那些应该被视为敏感且不应更改为其公有的内容。

环境

有时您希望为不同的环境或甚至完全不同的变量使用不同的变量值。这可以通过 @dev@prod 装饰器实现。

以下是一些示例

同一变量的不同值

@dev
PORT=3000
@prod
PORT=8080

在 prod 中省略变量

@dev
KEY="..."

在 dev 中省略变量

@prod
KEY="..."

请注意,任何未标记为 @prod@dev 的键将包含在所有环境中。

如何指定环境

--prod--dev 标志传递给检查/构建命令。默认情况下,环境设置为 dev,因此不需要提供 --dev 标志。

.vnv 文件

@dev
PORT=3000
@prod
PORT=8080

输出

C:\Users\aidan\project> vnv build --dev
Checking '.vnv'...
PORT ✔️
PORT ⏭️
Completed in 1.24ms
Completed build wrote output to .env.

生成的 .env 文件

# This file was generated from '.vnv' by vnv.

# @dev
PORT=3000

依赖项

~4–16MB
~147K SLoC