You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中无法导入bencode模块读取Torrent文件的问题求助

Node.js v20导入bencode模块失败:ERR_PACKAGE_PATH_NOT_EXPORTED

问题描述

尝试读取Torrent文件并使用bencode包解码,但无法导入bencode模块,报错提示No "exports" main defined,已尝试更新包、重新安装、清理npm缓存、强制修复审计问题等操作,均未解决。确认bencode包的package.json中存在exports字段。

代码

// index.js
const fs = require('fs');
const bencode = require('bencode');

const torrent = bencode.decode(fs.readFileSync('../sintel.torrent'));
console.log(torrent.announce.toString("utf8"));

错误输出

PS C:\Users\samad\Desktop\read-torrent\read-torrent-nodejs> node index     
node:internal/modules/cjs/loader:598
      throw e;
      ^

Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: No "exports" main defined in C:\Users\samad\Desktop\read-torrent\read-torrent-nodejs\node_modules\bencode\package.json
    at exportsNotFound (node:internal/modules/esm/resolve:294:10)
    at packageExportsResolve (node:internal/modules/esm/resolve:584:13)
    at resolveExports (node:internal/modules/cjs/loader:591:36)
    at Module._findPath (node:internal/modules/cjs/loader:668:31)
    at Module._resolveFilename (node:internal/modules/cjs/loader:1130:27)
    at Module._load (node:internal/modules/cjs/loader:985:27)
    at Module.require (node:internal/modules/cjs/loader:1235:19)
    at require (node:internal/modules/helpers:176:18)
    at Object.<anonymous> (C:\Users\samad\Desktop\read-torrent\read-torrent-nodejs\index.js:2:17)
    at Module._compile (node:internal/modules/cjs/loader:1376:14) {
  code: 'ERR_PACKAGE_PATH_NOT_EXPORTED'
}

Node.js v20.10.0

已执行操作

npm update
npm install bencode  # 重新安装
npm cache clean --force
npm audit fix --force

解决方案

方案1:切换为ES模块导入

bencode新版本可能采用纯ES模块规范,而当前代码使用CommonJS的require导致兼容问题,可通过以下方式调整:

  • 将文件后缀改为.mjs,修改导入语句:
    // index.mjs
    import fs from 'fs';
    import bencode from 'bencode';
    
    const torrent = bencode.decode(fs.readFileSync('../sintel.torrent'));
    console.log(torrent.announce.toString("utf8"));
    
  • 在项目根目录的package.json中添加"type": "module",保持文件后缀为.js,并改用ES模块导入语法。

方案2:直接导入CommonJS兼容的子路径

查看bencode的package.json中exports字段的配置,找到对应CommonJS的入口文件,直接导入该路径。示例:

const fs = require('fs');
const bencode = require('bencode/lib/bencode.js');

const torrent = bencode.decode(fs.readFileSync('../sintel.torrent'));
console.log(torrent.announce.toString("utf8"));

方案3:降级到支持CommonJS的bencode版本

若需继续使用CommonJS规范,可安装支持该规范的旧版本(如v2.x系列):

npm uninstall bencode
npm install bencode@2.0.3

内容的提问来源于stack exchange,提问作者samad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 15:01:25