运行全局安装的Node CLI应用报ENOENT找不到classes.json如何解决
问题原因
你代码中读取classes.json时使用了相对路径,全局安装后执行CLI命令时,Node的工作目录是当前终端所处的目录,而非CLI工具的实际安装目录,因此无法匹配到和入口文件同目录的classes.json。在项目目录下执行正常是因为此时工作目录刚好和文件所在目录重合。
解决方案
- 在入口文件
index.js中,使用绝对路径定位classes.json,借助Node内置变量__dirname获取当前入口文件所在的绝对目录,再拼接文件名即可 - CommonJS规范下的代码示例:
const path = require('path') const fs = require('fs') // 拼接得到classes.json的绝对路径 const classesJsonPath = path.join(__dirname, 'classes.json') // 后续所有读写操作统一使用classesJsonPath变量 const classesContent = JSON.parse(fs.readFileSync(classesJsonPath, 'utf8'))
- 如果是ES Module规范(package.json中配置了
"type": "module"),没有内置__dirname,可以用如下方式替换:
import { fileURLToPath } from 'url' import { dirname, join } from 'path' import fs from 'fs/promises' const __filename = fileURLToPath(import.meta.url) const __dirname = dirname(__filename) const classesJsonPath = join(__dirname, 'classes.json') // 后续读写操作使用classesJsonPath即可 const classesContent = JSON.parse(await fs.readFile(classesJsonPath, 'utf8'))
- 修改代码后重新全局安装你的包,即可在任意目录正常执行命令
内容的提问来源于stack exchange,提问作者AlexisG13
相关产品推荐
相关产品推荐

