所以,我用 Nodejs 创建了一个简单的 CLI(以及一些随附的包,如 inquirer、boxen 等),它使用
dotenv
来管理 .env
文件。如果我从它的根目录运行 CLI,它就没有问题 (node .
)。但是,当我全局安装它时 (npm i -g .) 所以我可以在终端中运行它作为我在 package.json
文件中设置的名称,它找不到 .env.
据我所知,所有全局安装所做的就是对项目进行符号链接,并将别名添加到节点路径,这样我就可以在终端中的任何地方运行它,但我正在努力寻找一种方法来获得
.env
阅读所以 CLI 将正常运行。
我已经尝试过其他
.env
包(我不太了解它,所以知道引用它的正确方法可能是我的主要问题)。
我已经尝试更改
dotenv.config()
以包含某种形式的路径引用,但我的构建设置为 module
构建,所以它抱怨我使用的是导入而不是 require (import * as dotenv from 'dotenv'
),就像我说;如果我运行node .
.,从根目录可以正常工作
我想因为它只是符号链接文件夹并创建别名,所以它能够毫无问题地读取
.env
文件。但我真的不知道还能尝试什么。
Index.js
#! /usr/bin/env node
import fs from 'fs'
import * as dotenv from 'dotenv'
dotenv.config()
let token = process.env.PERSONAL_TOKEN
async function loadUserOptions() {
const client = new Client({ apiKey: token })
}
此时,如果我通过 CLI 名称运行它,它将失败,因为找不到
PERSONAL_TOKEN
,但如果我使用 node .
从它的根目录运行它,它工作得很好。
编辑 因此,在意识到(感谢你们可爱的人们)CLI 的
.env
是一个愚蠢的想法之后,我最终采用的解决方案是更有针对性的。我发现了一个名为 Conf 的非常可靠的包,它以非常简单的方式保存命令行数据,这让我可以从用户那里获取输入提示并存储必要的数据。
所以,感谢可爱的人们发表评论并让我走上正轨,正确的解决方案(至少,对我有用的解决方案)是使用 Conf。
Conf
的美妙之处在于它以与 LocalStorage 类似的方式存储您要求的任何数据。语法非常容易记住,并且非常适合我的特定用例。我希望这可以帮助别人。再次感谢社区的帮助。