全局安装npm包youtube-playlist-export后运行报ENOENT无此文件错误
问题原因
- 你使用的
read-pkg库默认会读取当前命令执行工作目录下的package.json,你在用户主文件夹运行ytpl-export命令时,该目录下不存在对应工具的package.json,直接触发文件不存在报错。 - 你的npm包配置中
files字段仅指定了source文件夹,发布包时根目录的package.json没有被打包上传到npm,就算指定读取路径也无法找到该文件。
修复方案
1. 调整npm包发布配置
修改package.json的files字段,将根目录的package.json加入发布文件列表:
{ "files": [ "source", "package.json" ] }
2. 修正package.json读取路径
修改source/cli.js代码,显式指定读取CLI工具自身根目录下的package.json,不要使用默认的当前工作目录:
首先引入路径处理相关模块:
import { fileURLToPath } from 'url'; import { dirname, join } from 'path';
然后替换原有readPackage调用逻辑:
const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); // 从cli.js所在的source目录上溯一级,即为包根目录,对应package.json位置 const pkg = await readPackage({ cwd: join(__dirname, '..') });
3. 可选优化
给异步自执行函数添加异常捕获逻辑,避免后续未知异常抛出未处理的Promise拒绝,提升使用体验:
(async () => { // 原有业务逻辑 })().catch(err => { console.error(c.red('运行出错:' + err.message)); process.exit(1); });
修改完成后重新发布新版本到npm,再全局安装测试即可正常运行。
内容的提问来源于stack exchange,提问作者AnsonH
相关产品推荐
相关产品推荐

