使用 .env 使用 Node 创建了我自己的 CLI,但在全局安装时找不到它

问题描述 投票:0回答:1

所以,我用 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 的非常可靠的包,它以非常简单的方式保存命令行数据,这让我可以从用户那里获取输入提示并存储必要的数据。

javascript node.js command-line-interface
1个回答
0
投票

所以,感谢可爱的人们发表评论并让我走上正轨,正确的解决方案(至少,对我有用的解决方案)是使用 Conf

Conf
的美妙之处在于它以与 LocalStorage 类似的方式存储您要求的任何数据。语法非常容易记住,并且非常适合我的特定用例。我希望这可以帮助别人。再次感谢社区的帮助。

© www.soinside.com 2019 - 2024. All rights reserved.