其他编程语言集成dotenvx
当然dotenvx并不能提供所有编程语言的SDK,如果你使用的编程语言还没有对应的dotenvx SDK,那么你可以使用以下方式进行集成。
dotenvx decrypt --dump
命令可以执行解密,并将解密的配置项以json格式打印到标准输出(stdout),这样其他语言可以构建对应的命令行,
然后执行该命令行就可以得到输出,然后解析输出的json即可。 这里需要两个环境变量
DOTENV_PRIVATE_KEY=xxxx
:对应解密的私钥NO_COLOR=1
:设置为1,表示不使用颜色输出
这里你不用担心,dotenvx命令行使用Rust开发,非常小(3M左右),执行速度也非常快,所以可以放心使用。
这里我们就举一个例子,如Ruby和Dotenvx集成,你只需要一个简单的AI提示词,就可以创建对应的代码。 提示词:
Ruby language: please create a function `dotenvx_load?`, to run command line `dotenvx decrypt --dump`,
capture the stdout json , parse the stdout json as Hash object and inject all key/value from the hashmap as envrionment variables.
Claude Sonnet 4输出的代码:
require 'json'
require 'open3'
def dotenvx_load?
begin
# Run the dotenvx decrypt --dump command and capture stdout
stdout, stderr, status = Open3.capture3('/Users/linux_china/.cargo/bin/dotenvx decrypt --dump')
# Check if the command executed successfully
unless status.success?
warn "dotenvx command failed: #{stderr}"
return false
end
# Parse the JSON output
env_hash = JSON.parse(stdout)
# Inject each key-value pair as environment variables
env_hash.each do |key, value|
ENV[key] = value.to_s
end
true
rescue JSON::ParserError => e
warn "Failed to parse JSON output: #{e.message}"
false
rescue Errno::ENOENT => e
warn "dotenvx command not found: #{e.message}"
false
rescue StandardError => e
warn "Error loading dotenvx: #{e.message}"
false
end
end
# Usage example
if dotenvx_load?
puts "Environment variables loaded successfully"
puts ENV["NICK"]
else
puts "Failed to load environment variables"
end
语言SDK集成
通过语言SDK调用dotenvx命令行方式集成也并不复杂,还有一种方式就是调整语言SDK命令行方式,这里以Python为例。
你使用uv来管理项目,Python对应的命令行为.venv/bin/python
,该命令行其实是软连接到具体的Python版本目录下的,
如$HOME/.local/share/uv/python/cpython-3.13.7-macos-x86_64-none/bin/python3.13
。
你可以创建一个shell脚本,名称为python
,对应的代码如下:
#!/bin/bash
# load .env by dotenvx
eval $( dotenvx decrypt --stdout --format shell )
# Execute python3 command with arguments
exec $HOME/.local/share/uv/python/cpython-3.13.7-macos-x86_64-none/bin/python3.13 "$@"
然后使用该脚本覆盖原先的.venv/bin/python
,这样你每次使用.venv/bin/python
命令行时,
就会先调用dotenvx加载.env
文件,然后再执行Python命令,这样就完成了.env
文件的解密和环境变量的注入,
然后再执行python命令,这样就起到Python和dotenvx的集成,而其他的Python功能完全不受影响,如debug等。
借助该方式,你可以非常方便地集成其他编程语言,如lua, PHP, Perl等,你只需要创建执行器对应的wrapper脚本,
如luaw
, phpw
, perlw
等,和Gradle的gradlew
脚本类似,gradlew
脚本负责环境检测、可能的gradle下载,
然后再执行具体的gradle命令。
Dotenvx之命令软连接
dotenvx link <command>
命令可以创建命令软连接,这个是对原型的命令的封装。当你执行软连接命令式,其实是由Dotenvx命令行来执行的,
然后会加载配置文件,然后再执行原命令,这样就完成了对原命令的.env
配置集成。
如你使用Bun SQL特性,你已经在.env
中设置好了数据库连接信息,如下:
DATABASE_URL="mysql://root:this_is_long_password@localhost:3306/test"
你只需要执行dotenvx link bin/mysql
,然后执行./bin/mysql
,就可以登录配置项指定的MySQL数据库了,
同样的方式,你可以使用dotenvx link bin/psql
,然后执行./bin/psql
,就可以登录PostgreSQL数据库了。
借助这种软连接方式,你不需要修改任何命令和脚本,就可以轻松地集成dotenvx的.env
配置,非常方便。
Dotenvx和DuckDB集成
DuckDB是一款非常流行的嵌入式OLTP数据库,已经受到非常多的开发人员喜欢,但是其Secret管理能力比较弱,没有提供完备的加密机制, 目前Dotenvx可以为DuckDB提供Secret的加密管理能力,让我们看一个样例。
你创建一个.env.duckdb
文件,内容如下:
# secret example
DUCKDB__HTTP_SECRET=secret
DUCKDB__HTTP_SECRET__TYPE=http
DUCKDB__HTTP_SECRET__BEARER_TOKEN=xxxx
# database attach example
DUCKDB__SECRET_DB=attach
DUCKDB__SECRET_DB__TYPE=duckdb
DUCKDB__SECRET_DB__URL=encrypted.db
DUCKDB__SECRET_DB__ENCRYPTION_KEY=123456
从上述的代码中,我们采用__
作为层级分隔符,这样就可以将复杂的结构体转换为环境变量,
详细的方法大家可以参考: Structured data in environment variables
所以DuckDB的secret的配置就可以从SQL方式转换为标准的配置项,结构如下:
DUCKDB__OBJECT_NAME=attach/secret
DUCKDB__OBJECT_NAME_TYPE=secret_type/db_type
DUCKDB__OBJECT_NAME_ATTRIBUTE_NAME=value
最后我们使用dotenvx link bin/duckdb
创建DuckDB CLI的软链接,然后运行./bin/duckdb
即可,
Dotenvx就会自动加载.env.duckdb
文件中的加密配置项,然后转换为SQL,然后通过--cmd sql
参数传递给DuckDB CLI,
这样就完成了DuckDB的Secret的创建。
提示: 通过该方式创建的Secret是临时的,进程退出后就会丢失,而且也不会保存到$HOME/.duckdb_history
文件中,这样就避免了Secret泄露的问题。