# @dotenvx/primitives 中文文档

规范地址：https://npmcn.com/package/%40dotenvx/primitives/

版本：4\.4\.0
npm 元数据更新时间：2026-11-06T17:15:45.286Z
中文译文更新时间：2026-11-12T17:23:38.746Z
软件包许可：BSD-3-Clause

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40dotenvx/primitives
原文对照：https://npmcn.com/package/%40dotenvx/primitives/?lang=original
项目主页：https://github.com/dotenvx/dotenvx
源码仓库：https://github.com/dotenvx/dotenvx

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：205 kB，4 个文件
- 模块格式：CommonJS
- TypeScript 类型：未声明
- 运行依赖：0 个
- 首次发布：2026-06-19T19:11:45.958Z
- 最新版本发布：2026-11-06T17:15:45.093Z
- 近 30 天下载量：48465424（2026-10-13 至 2026-11-11，npm 官方下载统计）
- 已发布版本数：58（近 12 个月 58 个）

## 中文简介

由创造者创造的安全道具 `dotenv`

## 安装

```sh
npm install @dotenvx/primitives
```

也可以使用：`pnpm add @dotenvx/primitives`、`yarn add @dotenvx/primitives`、`bun add @dotenvx/primitives`

## README

# @ dotenvx/ 原始内容

官方节点j的实施情况 [dotenvx 原始语](https://github.com/dotenvx/primitives)。 。 。 .

它提供dotenv解析,扩展,命令评价,sep256k1 ECIES 加密和解密、密钥环、扫描、匹配、密封检测和 dotenv 源代码更新.

## 安装

```sh
npm install @dotenvx/primitives
```

创建一个 `.env` 文件 :

```dotenv
HELLO=World
```

加密它 :

```sh
$ dotenvx encrypt
```

阅读和解析 `index.cjs`,然后打印每个密钥和值:

```js
// index.cjs
const fs = require('node:fs')
const { parseSync } = require('@dotenvx/primitives')

const path = '.env'
const src = fs.readFileSync(path, 'utf8')
const parsed = parseSync(src)

for (const [key, value] of Object.entries(parsed.parsed)) {
  console.log(`${key}=${value}`)
}
```

那就运行它.

```sh
$ node index.cjs
HELLO=World
```

## API 密码

一个Dotenvxfile来源为不同阶段生成两种政策:

| 生成 | 校验 | 每把钥匙的规则 | 提供给检查器的值 |
| --- | --- | --- | --- |
| `policy` | `check` | `env` 财务报告和审定财务报表 `stdout` | 最终解决的环境字符串 |
| `storagepolicy` | `storagecheck` | `storage` 仅限 | 解密前原已存储的字符串 |

这两个政策发电机都具有记忆力。 呼叫者提供源文本和 值;这些原始人不读取文件,也不装入 shell 环境.

| 节点.js | 目的 |
| --- | --- |
| `check` | 对照最终环境值检查已编译的 Dotenvxfile 策略 |
| `decrypt` | 解密加密的 dotenvx 值 |
| `derive` | 从私人密钥中获取压缩的公钥 |
| `encrypt` | 加密公钥的值 |
| `encrypted` | 探测到 `encrypted:` 前缀 |
| `evaluate` | 评价 `$(command)` 替换 |
| `expand` | 扩展环境可变表达式 |
| `keypair` | 生成或还原 sip256k1 键盘 |
| `keyring` | 绘制公用至私用密钥地图 |
| `keyringSync` | 同步构建密钥环 |
| `match` | 创建按键模式匹配器 |
| `parse` | 解析、扩展、解密和分类 dotenv 字符串 |
| `parseSync` | 解析多腾v 字符串同步 |
| `parsearrays` | 保存重复任务时分析 dotenv 值 |
| `parsearraysSync` | 解析 dotenv 阵列同步 |
| `parsedotenvxfile` | 从 Dotenvx 文件源返回空字符串值的已声明密钥 |
| `parsedotenvxfileSync` | 以空字符串值同步返回已声明的密钥 |
| `policy` | 将 Dotenvx 文件文本或缓冲输入已解决的政策对象 |
| `profile` | 从 Dotenvx 文件配置和呼叫器输入中选择一个以逗号分隔的文件列表 |
| `publickeys` | 提取 dotenv 公钥元数据 |
| `redact` | 以已编辑的标记来替换秘密字符串 |
| `remove` | 按密钥删除 dotenv 任务 |
| `scan` | 扫描 dotenv 任务、 复制和评论 |
| `sealed` | 检查值是加密、空白还是秘密引用 |
| `storagecheck` | 根据存储策略验证原始存储字符串 |
| `storagepolicy` | 从 Dotenvxfile 源代码编译一个文件的存储规则 |
| `upsert` | 插入或替换 dotenv 任务 |

### `check(policy, env)`

验证最后的环境对象 `env` 返回时 `{ checked, errors }`返回的数值 遵循他们命名的校正规则,回到 `keys["*"].stdout.redacted` 未申报的密钥; 输入不变。 也使用已应用的未申报密钥 通配符环境验证规则和诊断严格性。 失踪 未申报的密钥不产生诊断. 错误包括: 键,代码,规则,消息,和严格的旗帜.

```js
check(policy('redacted true\nenv "TOKEN"'), { TOKEN: 'abc123' })
// { checked: { TOKEN: '[REDACTED]' }, errors: [] }
```

### `decrypt`

解密一个 `encrypted:` 使用六进制编码的私钥值。 纯值 不变地返回.

```js
const { decrypt, encrypt, keypair } = require('@dotenvx/primitives')

const { privateKey, publicKey } = keypair()
const encryptedValue = encrypt(publicKey, 'World')
const plaintext = decrypt(privateKey, encryptedValue)
console.log(plaintext)
// World
```

错误会显示稳定的 dotenvx 代码 :

```js
const { decrypt } = require('@dotenvx/primitives')

try {
  decrypt('', 'encrypted:abc123')
} catch (error) {
  console.log(error.code)
  // MISSING_PRIVATE_KEY
}
```

过 `{ prefix: false }` 作为解密基数64的第三个参数 不包括 `encrypted:` 前缀.

### `derive`

为私钥衍生压缩的 secp256k1 公钥.

```js
const { derive, keypair } = require('@dotenvx/primitives')

const { privateKey, publicKey } = keypair()
console.log(derive(privateKey) === publicKey)
// true
```

### `encrypt`

使用 dotenvx 兼容的 ECIES 加密 UTF-8 值并返回一个 `encrypted:`\- 预设值.

```js
const { encrypt, keypair } = require('@dotenvx/primitives')

const { publicKey } = keypair()
const encryptedValue = encrypt(publicKey, 'World')
console.log(encryptedValue.startsWith('encrypted:'))
// true
```

加密是随机的,所以两次加密相同的值 不同的密码.

### `encrypted`

检查一个数值是否从大小写敏感开始 `encrypted:` 前缀. 前缀也可作为 `encrypted.PREFIX`。 。 。 .

```js
const { encrypted } = require('@dotenvx/primitives')

console.log(encrypted.PREFIX)
// encrypted:
console.log(encrypted('encrypted:abc123'))
// true
console.log(encrypted('World'))
// false
```

### `evaluate`

评估 shell 命令替换并删除后面的新行 命令输出。 下面的例子使用 POSIX shell 命令.

```js
const { evaluate } = require('@dotenvx/primitives')

const value = evaluate('HELLO=$(printf World)', {})
console.log(value)
// HELLO=World
```

使用 `{}` 默认 :

| 选项 | 默认 | 目的 |
| --- | --- | --- |
| `processEnv` | `process.env` | 提供给命令的环境值 |
| `runningParsed` | `{}` | 先前解析的值; 覆盖 `processEnv` 对于命令 |

错误命令丢出代码错误 `COMMAND_SUBSTITUTION_FAILED`。 。 。 .

### `expand`

扩展 `$NAME`, (中文(简体) ), `${NAME}`,默认值表达式,和替代值 表达.

```js
const { expand } = require('@dotenvx/primitives')

const value = expand('postgres://${USER}:$PASS@localhost', {
  processEnv: { USER: 'scott', PASS: 'secret' }
})
console.log(value)
// postgres://scott:secret@localhost
```

支持的运算符 :

-   `${NAME:-fallback}` 在缺少或空时使用倒数.
-   `${NAME-fallback}` 缺少时使用倒计时.
-   `${NAME:+alternate}` 使用当前和非空的相交点.
-   `${NAME+alternate}` 使用在场时的替代.

使用 `{}` 默认 :

| 选项 | 默认 | 目的 |
| --- | --- | --- |
| `processEnv` | `process.env` | 现有环境价值 |
| `runningParsed` | `{}` | 逐渐解析的数值 |
| `overload` | `false` | 给 `runningParsed` 优先于 `processEnv` |
| `literals` | `{}` | 不应再扩展表达式的字面价值 |

### `injectsummary`

`injectsummary(count, files = [])` 共享注入格式 不记录、检查环境值或添加ANSI颜色. 呼叫者决定何时何地打印,并应用自己的静默设置.

```js
const { injectsummary } = require('@dotenvx/primitives')
injectsummary(2, ['.env']) // ⟐ injected env (2) from .env
```

文件也可能是公共元数据对象 `filepath`, (中文(简体) ), `publicKeys`,以及 `keySources` (公用钥匙 ) 这包括简短的代码和 独有的监护标签,例如:

```js
injectsummary(3, [{
  filepath: '.env',
  publicKeys: ['031f20abc'],
  keySources: { '031f20abc': 'armor' }
}]) // ⟐ injected env (3) from .env (031 F20) via Armor ⛨
```

`injectsummary.sources(files)` 返回时 `{ files, suffix }` 用于其他命令 摘要,因此加密和解密使用相同的标签和短码. 只通过公共元数据,从不通过私钥或环境值.

### `keypair`

生成新密钥派或从已有的私钥中恢复密钥.

```js
const { keypair } = require('@dotenvx/primitives')

const generated = keypair()
const restored = keypair(generated.privateKey)
console.log(generated.publicKey === restored.publicKey)
// true
```

返回对象包含 `privateKey` 财务报告和审定财务报表 `publicKey` 螺旋绳.

### `keyring`

构建一个按键为公钥且其值为匹配的对象 私钥.

```js
const { keyring, keypair } = require('@dotenvx/primitives')

const { privateKey, publicKey } = keypair()
const ring = await keyring({
  processEnv: { DOTENV_PRIVATE_KEY: privateKey }
})
console.log(ring[publicKey] === privateKey)
// true
```

默认, `keyring()` 读取 `.env.keys` 从当前工作目录中 键 `process.env`。缺少或无法读取的密钥文件无声 被忽略 。 设定 `fk` 以覆盖路径,或 `[]` 以禁用文件读取.

| 选项 | 默认 | 目的 |
| --- | --- | --- |
| `processEnv` | `process.env` | 环境包含 `DOTENV_PRIVATE_KEY*` 财务报告和审定财务报表 `DOTENV_PUBLIC_KEY*` 条目 |
| `ring` | `{}` | 现有公用至私用钥匙物体,已安装 |
| `fk` | `'.env.keys'` | 密钥文件路径或一系列路径 |
| `provider` | 无 | 函数在私钥缺失时使用公钥调用; 返回密钥环对象或对密钥的承诺 |

密钥文件中的私钥任务可以重复或逗号分隔. 无效的私钥被忽略 。 没有匹配的私钥的公钥 在环中保留空值.

### `keyringSync`

与相同的选项同步构建密钥环。 提供 `provider` 必须同步返回对象.

```js
const { keyringSync, keypair } = require('@dotenvx/primitives')

const { privateKey, publicKey } = keypair()
const ring = keyringSync({ processEnv: { DOTENV_PRIVATE_KEY: privateKey } })
console.log(ring[publicKey] === privateKey)
// true
```

也可用 `keyring.sync(options)`。 。 。 .

### `match`

创建支持 glob 模式的匹配者, 包括 `*` 财务报告和审定财务报表 `?`附加时 忽略图案。 用途 `picomatch` 模式和选项.

```js
const { match } = require('@dotenvx/primitives')

const isAllowed = match(['DOTENV_*'], { ignore: ['DOTENV_PRIVATE_*'] })
console.log(isAllowed('DOTENV_PUBLIC_KEY'))
// true
console.log(isAllowed('DOTENV_PRIVATE_KEY'))
// false
```

### `parse`

应用扩展、 超载优先级、 有选择 解密,并注射与已存在的分类.

```js
const { parse } = require('@dotenvx/primitives')

const result = await parse('A=file\nB=$A\nHELLO=World', { processEnv: {} })
console.log(result.parsed.B)
// file

for (const [key, value] of Object.entries(result.parsed)) {
  console.log(`${key}=${value}`)
}
```

`parse()` 自动调用 `keyring()`读取 `.env.keys` 从当前 默认工作目录。 缺少或无法读取的密钥文件无声 被忽略 。 覆盖 `fk` 以使用其他路径,或提供 `[]` 以禁用文件读取. 呼叫者仍然提供 Dotenv 源字符串; `parse()` 不读 `.env` 或将返回的值写入 `process.env`。 。 。 .

| 选项 | 默认 | 目的 |
| --- | --- | --- |
| `processEnv` | `process.env` | 优先、扩展和关键发现的现有环境价值 |
| `overload` | `false` | 让源值凌驾于已存在的环境值 |
| `ik` | 所有密钥 | 要解密的密钥模式或一系列模式 |
| `ek` | 无除外情形 | 从解密中排除的关键模式或类型 |
| `fk` | `'.env.keys'` | 密钥文件路径或一系列路径 |
| `provider` | 无 | 解析缺失的私钥; 与 `keyring()` |

排斥模式胜过包容模式。 这些模式控制 解密; 排除的密钥仍保留在解析输出中 .

结果包括:

| 外地 | 目录 |
| --- | --- |
| `parsed` | 所有解析的密钥/ 值对 |
| `injected` | 分类为注射的值,包括已解密的已存在的密码文本 |
| `existed` | 从所提供的环境中保存的价值 |
| `errors` | 解析/解析出错对象 `code` 财务报告和审定财务报表 `message` |

所有三个对象中的值都是字符串. 重复的密钥保留最后的 加工价值。 检查 `errors` 用于未解密的加密值。 例外 关键提供者可以拒绝承诺.

### `parseSync`

Parses dotenv source与相同的选项和结果形状同步. 提供 `provider` 必须是同步的.

```js
const { parseSync } = require('@dotenvx/primitives')

const result = parseSync('HELLO=World', { processEnv: {} })
console.log(result.parsed.HELLO)
// World
```

也可用 `parse.sync(source, options)`。 。 。 .

### `parsearrays`

使用 `parsearrays(source, options)` 以数组保存重复的任务. 它接受的选项与 `parse()`。所有三个对象(`parsed`, (中文(简体) ), `injected`,以及 `existed`)包含数组,甚至对于一个单一任务的密钥也是如此. `parse()` 保留最后一个值.

```js
const { parsearrays } = require('@dotenvx/primitives')

const result = await parsearrays('HELLO=World\nHELLO=Node', { processEnv: {} })
console.log(result.parsed.HELLO)
// ['World', 'Node']
```

两种功能都自动建立密钥环并共享扩展,解密, 和优先行为。 排斥模式胜过包容模式.

迁移:替换 `parse(source, { array: true })` 与 `parsearrays(source)`。 。 。 . 删除 `array` 从选项; 它不再改变输出类型.

### `parsearraysSync`

解析数组与相同选项和结果形状同步 `parsearrays()`提供 `provider` 必须是同步的.

```js
const { parsearraysSync } = require('@dotenvx/primitives')

const result = parsearraysSync('HELLO=World\nHELLO=Node', { processEnv: {} })
console.log(result.parsed.HELLO)
// ['World', 'Node']
```

也可用 `parsearrays.sync(source, options)`。 。 。 .

### `parsedotenvxfile(source, file = '.env')`

同时可用 `parsedotenvxfile.sync(source, file)` 或者说 `parsedotenvxfileSync(source, file)`。 。 。 .

返回选定文件的空字符串值的已声明密钥.

```js
await parsedotenvxfile('env "PORT"\nenv "TOKEN"')
// { PORT: '', TOKEN: '' }
```

### `policy(source, file = '.env')`

编译 Dotenvx 文件文本或缓冲 `{ keys: { ... } }`。每个键都有 `env` 审定规则和 `stdout` 编辑规则。 存储设置被省略 . 对于逗号分隔的文件名,第一个文件会赢得明确的规则. 汇编 在内存中工作;呼叫者读取文件并加载环境值.

```js
const rules = policy('env "TOKEN", required: true, redacted: true')
// rules.keys.TOKEN:
// { env: { type: 'string', required: true, strict: false },
//   stdout: { redacted: true } }
```

保留 `keys["*"]` 条目包含未申报密钥的默认值.

同一来源可以产生两种政策:

```js
const source = 'storage "encrypted"\nenv "TOKEN", required: true, redacted: true'
const envRules = policy(source, '.env.production')
const storageRules = storagepolicy(source, '.env.production')

check(envRules, { TOKEN: 'resolved-secret' })
// { checked: { TOKEN: '[REDACTED]' }, errors: [] }
storagecheck(storageRules, { TOKEN: ['encrypted:example'] })
// { checked: { TOKEN: ['encrypted:example'] }, errors: [] }
```

### `storagepolicy(source, file = '.env')`

为一个文件名编译同一个源 。 每个密钥只包含 `storage` 规则 : `type` (单位:千美元)`any`, (中文(简体) ), `encrypted`,或 `plaintext`, (中文(简体) ), `required`,以及 `strict`默认类型到 `any`。按规定严格遵循 决 议 `policy`: 每键覆盖, 所选文件设置, 根设置, 然后是虚假的. 此政策没有固定/重排设置 .

```js
const rules = storagepolicy('storage "encrypted"\nenv "PORT", storage: "plaintext"', '.env.production')
storagecheck(rules, { PORT: ['3000'], TOKEN: ['encrypted:example'] })
```

将原始存储字符串传递到 `storagecheck`,在解密之前。 加密检查 承认 `encrypted:` 前缀;它们不认证密码文本.

### `storagecheck(policy, scanned)`

检查原始存储字符串与 `storagepolicy` 规则和返回 `checked` 财务报告和审定财务报表 `errors`。不应用 Stdout 编辑。 使用 `check` 与 `policy` 用于解决的环境验证和编辑.

### `profile(source, options = {})`

将 Dotenvx 文件配置文件解析为逗号分隔文件名 。 接受 `f`, (中文(简体) ), `profile`, (中文(简体) ), `processEnv`,以及 `environmentKeys` 选项. `processEnv` 默认为 `process.env`· ; 通过 `{}` 忽略进程环境。 明确文件胜过配置名称; 使用开发配置文件或 `.env`。 。 。 .

```js
profile('profile "production", files: [".env.production"]', { profile: 'production' })
// '.env.production'
```

### `publickeys`

提取每个 `DOTENV_PUBLIC_KEY*` 任务时 保存密钥顺序.

```js
const { publickeys } = require('@dotenvx/primitives')

const keys = publickeys('DOTENV_PUBLIC_KEY=public-a\nDOTENV_PUBLIC_KEY_PRODUCTION=public-b')
console.log(keys)
// ['public-a', 'public-b']
```

### `redact(text, secrets)`

将字面上的秘密字符串替换为 `[REDACTED]`,包括重叠匹配.

```js
redact('token=abc123', ['abc123']) // 'token=[REDACTED]'
```

### `remove`

删除给定密钥的每一项任务。 它保存周围的线路, 注释,其他密钥的多行值,以及 CRLF 线尾. 如果钥匙 缺少,源代码不变.

```js
const { remove } = require('@dotenvx/primitives')

const updated = remove('HELLO=one\nFOO=bar\nHELLO=two\n', 'HELLO')
console.log(updated === 'FOO=bar\n')
// true
```

### `scan`

扫描 dotenv 任务而不应用扩展或解密. 复制 值及其注释按源顺序保存.

```js
const { scan } = require('@dotenvx/primitives')

const result = scan('HELLO=first\nHELLO=second # optional')
console.log(result.scanned.HELLO)
// ['first', 'second']
console.log(result.comments.HELLO)
// [undefined, 'optional']
```

| 选项 | 默认 | 目的 |
| --- | --- | --- |
| `ik` | 所有密钥 | 要包括的密钥模式或一系列模式 |
| `ek` | 无除外情形 | 要排除的关键模式或类型 |
| `expandDoubleQuotedNewlines` | `true` | 解码逃出的新行、车厢返回和双引号的标签 |
| `convertWindowsNewlines` | `true` | 将 CRLF 和 CR 线的终点规范为 LF |

可选变换接收 `{ name, value, quote, comment }` 每个 任务。 它的返回值被存储在相应的数组中 :

```js
const { scan } = require('@dotenvx/primitives')

const result = scan('HELLO=World', ({ value }) => value.toUpperCase())
console.log(result.scanned.HELLO)
// ['WORLD']
```

如果有选项, 将变换作为第三个参数 : `scan(source, options, transform)`。 。 。 .

### `sealed(src, storagePolicy?)`

回返 `true` 当每个非元数据值都是加密的,只有空或白空, 或者从 `op://` (1个口活字)或 `bw://` (Bitwarden 密码管理器). `DOTENV_PUBLIC_KEY*` 财务报告和审定财务报表 `*_PLAIN` 值被允许为正文. 空源被视为被封. 检查每个重复的任务 . 可选解决 `storagepolicy()` 允许纯文本密钥。 明确 `encrypted` 规则高于 `_PLAIN` 后缀; `any` 使用后缀会议。 现有 即使政策允许简单文字,密码文本仍然被接受. 秘密引用以其对大小写敏感的前缀识别;它们不是 解决或鉴定了供应商。 其他URL、可变参考文献和 命令替换不例外.

```js
const { sealed } = require('@dotenvx/primitives')

console.log(sealed('HELLO=encrypted:abc123'))
// true
console.log(sealed('HELLO=World'))
// false
```

### `upsert`

插入缺失的任务或替换现有密钥的所有出错. 它保留了现有的引号样式,导出前缀,多行值,以及 CRLF行终.

```js
const { upsert } = require('@dotenvx/primitives')

const updated = upsert('HELLO=one\nHELLO=two', 'HELLO', ['uno', 'dos'])
console.log(updated)
// HELLO=uno
// HELLO=dos
```

字符串替换适用于每次发生。 对于偶发性变化, 提供一个阵列,每个现有任务有一个替换。 为了新的 键,提供字符串;插入的任务为双引出.

## 兼容性

采用私人节点Js兼容性测试,对实施情况进行测试. 这个 [粗略执行](https://npmcn.com/package/%40dotenvx/primitives/rust/README.md) 提供相应的原始 含有 Rust-inative 类型和命名,包括 `policy`, (中文(简体) ), `storagepolicy`, (中文(简体) ), `profile`, (中文(简体) ), `check`,以及 `redact` 带有相同的 Dotenvx 文件默认和优先规则.

## 出版

从此目录手动发布 。 保持npm 和 Rust 状态 版本匹配, 如下 [发展.md](https://npmcn.com/package/%40dotenvx/primitives/DEVELOPMENT.md),然后运行 :

```sh
npm run standard
npm run build
npm pack --dry-run
npm publish
```

## 第三方通知

此包件将下列麻省理工学院许可包件的一部分捆绑起来:

-   `eciesjs`
-   `@ecies/ciphers`
-   `@noble/curves`
-   `@noble/hashes`
-   `@noble/ciphers`

### 关系

MIT 许可证

版权(c) 2019-2026 李伟良

特此免费准许任何人获得副本 ,用于处理 在软件中不受限制,包括不受限制的权利 使用、复制、修改、合并、出版、分发、分许可证和/或出售 软件的复制件,并允许该软件所针对的人 满足下列条件:

上述版权通知和这项许可通知应载入所有 软件的复制件或大部分.

软件是提供的"AS IS", 没有任何的恐惧, EXPRESS OR ,包括但不限制于雇佣军的保障, 特别目的和非目的的证明。 绝对不会 B. 任何索赔、索赔或其他索赔的索赔人或 责任,在契约、契约或其他行为中,产生于, 财产、财产、财产、财产、财产或财产 软件.

### @ecies/密码

MIT 许可证

版权(c) 2019-2026 李伟良

特此免费准许任何人获得副本 ,用于处理 在软件中不受限制,包括不受限制的权利 使用、复制、修改、合并、出版、分发、分许可证和/或出售 软件的复制件,并允许该软件所针对的人 满足下列条件:

上述版权通知和这项许可通知应载入所有 软件的复制件或大部分.

软件是提供的"AS IS", 没有任何的恐惧, EXPRESS OR ,包括但不限制于雇佣军的保障, 特别目的和非目的的证明。 绝对不会 B. 任何索赔、索赔或其他索赔的索赔人或 责任,在契约、契约或其他行为中,产生于, 财产、财产、财产、财产、财产或财产 软件.

### @noble/曲线和 @noble/hashes

《麻省理工学院许可证》

版权 (c) 2022 保罗·米勒(英语:[https://paulmiller.com (中文(简体) )](https://paulmillr.com/)(中文(简体) )

特此免费准许任何人获得副本 软件和相关文档文件(“软件”),处理 在软件中不受限制,包括不受限制的权利 使用、复制、修改、合并、出版、分发、分许可证和/或出售 软件的复制件,并允许该软件所针对的人 满足下列条件:

上述版权通知和本许可通知应列入 软件的所有副本或大部分.

软件是提供的 " AS IS " ,没有任何形式的恐惧、排斥或 ,包括但不限制于雇佣军的保障, 特别目的和非目的的证明。 绝对不会 B. 任何索赔、索赔或其他索赔的索赔人或 责任,在契约、契约或其他行为中,产生于, 或与溶剂或溶剂的使用或 软件.

### @ noble/ 密码

《麻省理工学院许可证》

版权 (c) 2022 保罗·米勒(英语:[https://paulmiller.com (中文(简体) )](https://paulmillr.com/)(中文(简体) ) 版权 (c) 2016 托马斯·波宁 [色情制品@bolet.org](mailto:pornin@bolet.org)

特此免费准许任何人获得副本 软件和相关文档文件(“软件”),处理 在软件中不受限制,包括不受限制的权利 使用、复制、修改、合并、出版、分发、分许可证和/或出售 软件的复制件,并允许该软件所针对的人 满足下列条件:

上述版权通知和本许可通知应列入 软件的所有副本或大部分.

软件是提供的 " AS IS " ,没有任何形式的恐惧、排斥或 ,包括但不限制于雇佣军的保障, 特别目的和非目的的证明。 绝对不会 B. 任何索赔、索赔或其他索赔的索赔人或 责任,在契约、契约或其他行为中,产生于, 或与溶剂或溶剂的使用或 软件.

## 常见问题

### @dotenvx/primitives 是什么？

由创造者创造的安全道具 dotenv

### 如何安装 @dotenvx/primitives？

在项目目录运行 npm install @dotenvx/primitives，或使用 pnpm add / yarn add / bun add。

### @dotenvx/primitives 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/dotenvx\_\_primitives 是否存在。

### @dotenvx/primitives 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @dotenvx/primitives 可以商用吗？

@dotenvx/primitives 使用 BSD-3-Clause 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。另外不得用原作者名义为衍生产品背书。以上为概括，不构成法律意见，请以许可原文为准。

### @dotenvx/primitives 的下载量有多少？

根据 npm 官方下载统计，@dotenvx/primitives 在 2026/10/13 – 2026/11/11 这 30 天内被下载 48,465,424 次，日均约 1,615,514 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @dotenvx/primitives 还在维护吗？

最新版本 4\.4\.0 发布于 2026/11/07（6 天前）；至今共发布 58 个版本，其中过去 12 个月发布了 58 个；首次发布于 2026/06/20。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

