dotenv mono

其他资源 2025-08-02

dotenv mono

如果这个项目为您提供了帮助,请为我们提供明星?


描述

这是什么?

为了防止代码重复并增强可重复使用性,包括所有环境变量在内的集中配置可能很方便。而不是为每个软件包生成.env文件,我们可以在项目的根部使用一个.env文件。

这是一个允许MonorePo应用程序和软件包共享和加载集中式dotenv的软件包。它基于dotenv软件包。

它还包括一些额外的功能,例如操纵和节省Dotenv文件的更改,默认的集中文件以及具有订购和优先级的文件加载程序。

默认情况下启用了插件dotenv-expand。

结构示例
├── .env
├── .env.production
├── .env.defaults
├── packages
│   ├── ui-library
│   ├── other-library
├── apps
│   ├── web
│   │   ├── .storybook
│   ├── docs

它如何工作?

包装搜索第一个.ENV文件,与某些优先级标准匹配,通过行走parent the Parent Directories。

优先事项

从当前的流程目录开始,该软件包找到了第一个文件,该文件匹配了最优先级的最佳文件程序和文件名标准。 UP文件夹的深度越大,其优先级就越少。

可以在使用优先属性属性的配置上自定义优先级,请参见以下示例。

注意:NODE_ENV的允许值通常是测试,开发和生产。

优先事项文件名
75 .env。$(node_env).local
50 .env.Local
25 .env。$(node_env)
1 .env
例子

给定以下文件夹结构,并带有DotEnv文件:

├── .env
├── .env.production
├── apps
│   ├── .env.development
│   ├── web
│   ├── docs
│   │   ├── .env
│   │   ├── .env.local

有以下优先顺序:

小路优先事项深度
.env 1 2
.env.生产25 2
应用/.env.开发25 1
应用/文档/.env 1 0
apps/docs/.env.local 50 0

然后,我们将有以下结果方案:

当前的工作目录env匹配
/发展.env
/生产.env.生产
应用/网络发展.env
应用/网络发展应用/.env.开发
应用/文档发展apps/docs/.env.local

安装

从NPM或YARN安装库,只是运行以下命令行之一:

NPM
NPM安装dotenv-mono-保存纱线添加dotenv-mono

在Next.js上安装

对于next.js的自定义高级配置,您可以在项目目录的根(package.json旁边)中创建next.config.js或next.config.mjs文件。

在文件顶部添加以下行:

 require ( "dotenv-mono" ) . load ( ) ; 
例子
 require ( "dotenv-mono" ) . load ( ) ;

/**
 * @type { import('next').NextConfig }
 */
const nextConfig = {
	/* config options here */
} ;

module . exports = nextConfig ;

在故事书上安装

主配置文件是.storybook/main.js。该文件控制Storybook服务器的行为,因此您必须在更改它时重新启动Storybook的过程。

在文件上添加以下几行:

{ return { ...config, ...dotenv.env, }; }, }; module.exports = config;">
 const dotenv = require ( "dotenv-mono" ) . load ( ) ;

const config = {
	/* config options here */
	env : ( config ) => {
		return {
			... config ,
			... dotenv . env ,
		} ;
	} ,
} ;

module . exports = config ; 

用法

加载

将环境变量从dotenv导出到工作过程中的简单方法。以下是基于您的偏好的几种潜在实施方法。

 // Inline
require ( "dotenv-mono" ) . load ( /* config */ ) ;

// Using the function
const { dotenvLoad } = require ( "dotenv-mono" ) ;
dotenvLoad ( /* config */ ) ;

// Using import
import { dotenvLoad } from "dotenv-mono" ;
const dotenv = dotenvLoad ( ) ; // Dotenv instance

// Using the class
const { Dotenv } = require ( "dotenv-mono" ) ;
const dotenv = new Dotenv ( /* config */ ) ;
dotenv . load ( ) ; 

具有dotenv输出

如果您需要一种快速的方法将Dotenv软件包替换为Dotenv-Mono ,并且还需要具有复古兼容的功能,则可以使用Config方法直接将其直接备份到DOTENV软件包之类的输出。

 // Inline
const output = require ( "dotenv-mono" ) . config ( /* config */ ) ;

// Using the function
const { dotenvConfig } = require ( "dotenv-mono" ) ;
const output = dotenvConfig ( /* config */ ) ;

带有扩展名的加载文件

 // Use `.dotenv.server` or `.dotenv.server.local`, etc...
load ( { extension : "server" } ) ;

加载特定的文件

 // You can specify the file path
load ( { path : "../../configs/.env" } ) ;

没有Dotenv-Expand扩展

 load ( { expand : false } ) ;

更改默认文件名

 load ( { defaults : ".env.def" } ) ;

更改优先级

 // If `.dotenv.overwrite` is present use it with max priority
load ( {
	priorities : {
		".env.overwrite" : 100 ,
	} ,
} ) ;

进行更改

 const dotenv = require ( "dotenv-mono" ) . load ( ) ;
dotenv . save ( { "MY_ENV_1" : "enjoy" } ) ;

// Without loading into the working process
const { Dotenv } = require ( "dotenv-mono" ) ;
const dotenv = new Dotenv ( ) ;
dotenv . loadFile ( ) ; // Skip loading into the process
dotenv . save ( {
	"MY_ENV_1" : "enjoy" ,
	"MY_ENV_2" : "'enjoy quotes'" ,
	"MY_ENV_3" : 999 ,
} ) ;

预付

就像在CLI/控制台上的DotEnv软件包上一样,您可以使用-require(-r)命令行选项来预加载dotenv。通过这样做,您无需在应用程序代码中要求并加载DotEnv。

$ node -r dotenv-mono/load your_script.js

下面的配置选项以格式Dotenv_config_ <选项> = value的命令行参数支持。

$ node -r dotenv-mono/load your_script.js dotenv_config_path=/custom/path/to/.env dotenv_config_debug=true

此外,您可以使用环境变量来设置配置选项。命令行参数将在这些之前。

$ DOTENV_CONFIG_ < OPTION > =value node -r dotenv-mono/load your_script.js
$ DOTENV_CONFIG_ENCODING=latin1 DOTENV_CONFIG_DEBUG=true node -r dotenv-mono/load your_script.js dotenv_config_path=/custom/path/to/.env

CLI

您可以将Dotenv-Mono用作命令行工具来运行使用.ENV文件加载的环境变量的命令。这类似于dotenv-cli,但具有Dotenv-Mono的所有增强功能。

 # Basic usage - load .env and run a command
dotenv-mono -- node your_script.js

# Load specific .env file
dotenv-mono -e .env.production -- node your_script.js

# Load multiple .env files
dotenv-mono -e .env.local -e .env.production -- node your_script.js

# Set additional variables
dotenv-mono -v NODE_ENV=production -v DEBUG=true -- node your_script.js

# Print a variable value
dotenv-mono -p NODE_ENV

# Debug mode - see what files would be loaded
dotenv-mono --debug -e .env.production

# Use all dotenv-mono features
dotenv-mono --cwd /path/to/project --extension server --depth 3 -- node server.js

CLI选项

选项描述
- 帮助打印帮助消息
- 调试输出要处理的文件,但实际上没有解析或运行命令
-e 将文件<路径>解析为.env文件,然后在环境中添加变量(多个允许)
-v = 使用将变量<名称>放入环境中(多个允许)
-p 的打印值向控制台
- 不扩散跳过变量扩展
- 跨越覆盖系统变量
-CWD 指定当前的工作目录
- 深度<数字>指定找到文件夹树时达到的最大深度
- 编码指定包含环境变量的文件的编码
- Extension 指定以加载仅在特定应用/软件包上使用的特定dotenv文件
- 默认<文件>指定Dotenv文件名
- 优先级指定文件名优先级的标准,以加载为dotenv文件

方法

config

环境描述默认
CWD指定当前的工作目录process.cwd()
调试打开/关闭日志记录以帮助调试为什么未设置某些键或值错误的
默认值指定默认值dotenv文件名(它不能覆盖任何环境变量) .env.defaults
深度指定最大深度以从儿童目录中找到文件夹4
编码指定包含环境变量的文件的编码UTF8
扩张打开/关闭Dotenv-Expand插件真的
扩大指定以加载仅在特定应用/软件包上使用的特定dotenv文件(ex .env.server ...)
覆盖覆盖机器上已经设置了带有.env文件值的所有环境变量错误的
小路如果包含环境变量的文件位于其他地方,则指定自定义路径
优先事项指定文件名优先级的标准,以加载为dotenv文件请参阅优先级

dotenv方法

负载环境

它将按照标准读取您的.env文件,解析内容,将其分配给process.env。

注意:此方法与以前的加载函数不同。因为它要求通过构造函数在类实例上加载配置。

public load(loadOnProcess: boolean): Dotenv;

加载文件

它将按照标准读取您的.env文件,解析内容,准备以编程方式读取或更改。

public loadFile(): Dotenv;

节省

将输入的数据与加载或LoadFile的加载数据合并,并保存原始Dotenv文件上的更改。

注意:如果存在.env.defaults,则不会被覆盖,您可以将更改保存在主dotenv文件上(.env,.env.local等...)

public save(changes: Record): Dotenv;

解析

在此处查看dotenv文档

public parse = Record>(src: string | Buffer): T;

?如何贡献

有一个主意吗?找到一个错误?请提出问题或提取请求。欢迎捐款,并非常感谢!每一点都有帮助,并且将永远给予信用。


下载源码

通过命令行克隆项目:

git clone https://github.com/marcocesarato/dotenv-mono.git