Skip to main content

dotenvx JetBrains IDE插件

dotenvx命令虽然小巧快速,但是在一些场景中,还是不够便捷。我在IDE已经打开了代码,突然不能确认某一个配置项是否正确, 这个时候最直接的方式可能就是在IDE中查看.env文件的内容,但是.env文件是加密的,又查看不了,只能回到命令行模式, 然后输入dotenvx get KEY来查看配置项的值,虽然简单,但是还是有点麻烦。

为了解决这个问题,我们提供了一个JetBrains IDE的插件:dotenvx JetBrains Plugin

目前插件的功能也比较全,包括文件创建、加密变量的inlay hint提示、加密变量的添加、Run Configuration with Dotenvx等。

创建.env文件

你可以通过右键菜单选择New -> Dotenvx file来创建一个新的.env或者properties文件,该文件会自动添加必要的元信息, 如UUID、name、group等信息,并且会自动生成一对秘钥用于加密配置项。

如果你已经有一个.env文件了,你可以通过macOS: ⌘NWindows/Linux: Alt+Insert快捷键,弹出Generate菜单, 然后选择Insert Public Key为当前.env文件添加公钥,这样就可以使用dotenvx的加密功能了。

为何要以Inlay Hints的方式查看加密项对应的明文信息?直接转换为普通文本查看不就可以了吗?

我们知道目前开发人员使用的编辑器或IDE基本上都是支持AI的,所以你打开某一文件进行编辑时,AI Agent会将当前编辑的内容提交到云上进行AI推理, 然后再返回对应的代码提示、Review结果等,如果你的.env文件是明文的,那么AI就可以直接读取到你的敏感配置项。 通过JetBrains提供的Inlay Hints功能,我们不需要将.env文件转换为明文,而是通过Inlay Hints的方式将加密的配置项对应的明文信息显示出来, 这样既能看到配置项的明文信息,又不会将敏感信息暴露给AI。

添加加密变量

还是上述的问题,如果你想在.env文件中添加一个变量,如果你直接使用key=value的方式添加,这个时候信息处于明文状态, 会被AI Agent读取到。 你需要使用dotenvx set KEY -的方式添加加密变量,这样才会比较安全。 但是在IDE和命令行中切换还是有点麻烦,所以我们提供了一个添加加密变量的功能。右击.env文件,选择Add Encrypted Variable, 然后输入变量名和变量值,点击确认后,插件会自动将加密后的内容添加到.env文件末尾,这样AI Agent就没有机会读取到配置中的敏感信息。

如果你想加密一个已有的明文变量,将光标移动到要加密的变量值上,然后按下Alter + Enter快捷键,调用出Intention Actions菜单, 然后选择Encrypt value with DOTENV_PUBLIC_KEY即可加密明文变量。

同样,你在已经加密的变量值上,按下Alter + Enter快捷键,调用出Intention Actions菜单,选择Edit encrypted value即可编辑加密变量, 插件会自动解密变量值,然后编辑,最后再加密更新会原来的变量位置。

粘贴(paste)即加密(encrypt)

在一些场景中,我们需要copy粘贴一些敏感信息到.env文件中,比如各种云服务的access key,API token等,这些厂商都会提供对应的Key和Token的拷贝操作, 当你copy后,很可能在.env文件中直接粘贴,如果你使用AI编辑器,那么很有肯能会导致敏感信息泄露的问题,这些AI编辑器都有文件变更监听机制。

这个时候,你只需要先输入Key名称,如下:

XXX_API_KEY=

然后Ctrl+V粘贴你的API Key,插件会自动将其加密,并生成如下内容:

XXX_API_KEY=encrypted:xxxx

当然并不是所有的粘贴数据操作都会进行加密,只有当key的名称包含password, secret, key, private, token, credential时, 才会进行加密操作,避免误操作。

Run Configuration with Dotenvx

考虑到测试的方便,有的时候我们需要在运行时加载.env文件中的配置项,这些之前通常是由命令行工具等完成的,但是现在这些.env文件都被加密啦, 我还是希望能够将.env文件中的配置项加载到运行时环境中,这样就可以在运行时使用这些配置项了,这就是Run Configuration with Dotenvx的功能。

目前Run configuration with Dotenvx支持的语言包括:Java, Node.js, Python, PHP, Ruby, Go,后续会考虑多增加。

Terminal支持

如果你在JetBrains IDE中使用内置的Terminal终端,如果监测到.env文件的存在,dotenvx插件会自动加载.env文件中的配置项, 然后转换为环境变量,这样你就可以在终端中直接使用这些配置项了。