【问题标题】:Error: ENOENT: no such file or directory when running a CLI app错误:ENOENT:运行 CLI 应用程序时没有这样的文件或目录
【发布时间】:2021-09-07 17:22:35
【问题描述】:

我正在编写一个小型 CLI 应用程序,当直接使用“node”命令运行它时它工作得非常好,我使用“npm -g”将它添加到我的 PATH 中,我还在我的 package.json 中添加了 bin 属性.

我的终端可以识别该命令,但它会引发以下错误:

Error: ENOENT: no such file or directory, open 'classes.json'

classes.json 是我正在读写的文件,它与 index.js 文件位于同一目录中。

该命令在我的节点项目目录上运行时有效。

我该如何解决这个问题?

【问题讨论】:

  • 尝试使用 classes.json 的绝对路径。
  • 请分享包含文件 index.js 和 classes.json 的文件夹结构以及试图在 index.js 中加载 classes.json 文件的代码。有了它,我可以在 2 分钟内帮你解决问题。
  • @MestreSan 这是我的文件夹结构:project_dir/ ├─ classes.json ├─ index.js ├─ package.json/ 这就是我读取文件的方式: const classes = JSON.parse( fs.readFileSync("classes.json", "utf-8"));
  • @Cliffniff 成功了!

标签: javascript node.js command-line-interface


【解决方案1】:

fs.readFileSync 在您当前所在的 shell 的工作目录中查找文件。如果您使用的是类 Unix 系统 (Linux/Mac) 或使用 Bash for Windows,您可以在终端上键入 pwd 以查看当前目录。

使用绝对路径并不理想,因为您不知道该 CLI 将放置在其他人的计算机上的什么位置。

虽然对于 JSON 文件,这不是我推荐的方法,但在文件所在的位置独立修复代码的方法可能是这样的:

const path = require('path')
const classJsonFile = path.join(__dirname,"classes.json")
const classes = JSON.parse(fs.readFileSync(classJsonFile, "utf-8"))

对于加载 JSON 文件,我建议使用 require 函数而不是 fs 然后解析 JSON。 (假设你是用 CJS 而不是 MJS 编码)

const classes = require("classes.json");

更简单、更干净。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-07
    • 2019-05-30
    • 2017-08-02
    • 1970-01-01
    • 2019-03-09
    • 2017-12-28
    • 2022-01-16
    • 2021-03-30
    相关资源
    最近更新 更多