首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误[ERR_PACKAGE_PATH_NOT_EXPORTED]:包子路径不是由“导出”定义的

错误[ERR_PACKAGE_PATH_NOT_EXPORTED]:包子路径不是由“导出”定义的
EN

Stack Overflow用户
提问于 2022-10-23 15:59:43
回答 2查看 1.9K关注 0票数 2

Node.js 16.14.2,npm 8.19.2。

我正在尝试运行一个导入OrbitDB的简单的OrbitDB脚本。下面是脚本:

hello_orbitdb.js

代码语言:javascript
运行
复制
// import the package
const OrbitDB = require('orbit-db');

下面是我试图运行它的方法,以及我所得到的错误:

代码语言:javascript
运行
复制
$ node hello_orbitdb.js
node:internal/modules/cjs/loader:488
      throw e;
      ^

Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: Package subpath './cid' is not defined by "exports" in /node_modules/multiformats/package.json
    at new NodeError (node:internal/errors:371:5)
    at throwExportsNotFound (node:internal/modules/esm/resolve:453:9)
    at packageExportsResolve (node:internal/modules/esm/resolve:671:7)
    at resolveExports (node:internal/modules/cjs/loader:482:36)
    at Function.Module._findPath (node:internal/modules/cjs/loader:522:31)
    at Function.Module._resolveFilename (node:internal/modules/cjs/loader:919:27)
    at Function.Module._load (node:internal/modules/cjs/loader:778:27)
    at Module.require (node:internal/modules/cjs/loader:1005:19)
    at require (node:internal/modules/cjs/helpers:102:18)
    at Object.<anonymous> (/node_modules/orbit-db/src/orbit-db-address.js:3:17) {
  code: 'ERR_PACKAGE_PATH_NOT_EXPORTED'
}

所以我看了一下/node_modules/orbit-db/src/orbit-db-address.js,它是如何开始的:

代码语言:javascript
运行
复制
'use strict'
const path = require('path')
const { CID } = require('multiformats/cid')

如何纠正此错误?

在我的node_modules文件夹中

代码语言:javascript
运行
复制
  "name": "orbit-db",
  "version": "0.28.7",

代码语言:javascript
运行
复制
  "name": "multiformats",
  "version": "10.0.2",
EN

回答 2

Stack Overflow用户

发布于 2022-10-28 05:40:47

你的问题听起来就像依赖问题。

首先,尝试删除node_modules目录并发出一个npm install,以便重新导入依赖项。

如果问题持续存在,发出一个npm install --save multiformats@9.9.0,看看这是否纠正了您的问题。

票数 2
EN

Stack Overflow用户

发布于 2022-10-30 01:45:38

您的主要问题是orbit-db依赖于自v1.0.0以来一直是ES模块的multiformats,但是您展示的orbit-db源代码有

代码语言:javascript
运行
复制
const { CID } = require('multiformats/cid')

ES模块只能通过动态的CommonJS语句加载到import()模块中。请参阅ES模块require上的require文档。

不支持使用require加载ES模块,因为ES模块具有异步执行。相反,使用import()从CommonJS模块加载ES模块。

您必须打开一个PR,将require更新为动态import('multiformats/cid')。最好的位置可能是区块,但是接下来您将把static isValid方法的API从同步更改为异步。似乎没有在很多地方被使用和API似乎是内部的,也就是不面向公众的,这不是一个很大的努力。

不过,您可能更喜欢使用更简单的路由,并将您的版本的orbit-db降级,而不是v0.26.0 ( 使用 ),后者是旧的cids包(即CommonJS )。

更新package.json条目以获取orbit-db

代码语言:javascript
运行
复制
"orbit-db": "^0.26.0"

重新安装:

代码语言:javascript
运行
复制
npm i
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74172640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档