[eggjs/egg]node 17 启动失败

2025-10-27 275 views
0
What happens?

Error: Package subpath './lib/request' is not defined by "exports" in /Users/artoria/wusong/microservice-server/node_modules/koa/package.json

复现步骤,错误日志以及相关配置

node 从 16 升级到 17,执行 egg-bin dev

相关环境信息
  • 操作系统:macOS 12
  • Node 版本:v17.1.0
  • Egg 版本: v2.32.0

回答

4

删除 node_modules 后重新安装下依赖就行了

6

删除 node_modules 后重新安装下依赖就行了

@hyj1991 为什么需要这样操作?我升级了 egg 依赖之后执行了 npm ci,也是报错

0

重新安装了依赖,出现了另一个问题

Error: ENOENT: no such file or directory, scandir '/node_modules/egg-session/app/schedule'

related: #4798

node 16 新出的那个 package.json 里面的 export 配置校验问题吧。

导致 egg-core 里面的这个 require 挂了:https://github.com/eggjs/egg-core/blob/77e11f5fb38b3646fb20deb78bbc239b06bf8349/lib/loader/mixin/extend.js#L8

cc @dead-horse

@atian25 嗯,但是我也把 egg 从 2.30.0 升级到了 2.32.0,如果 egg-core 已经修复了会连带更新的吧

p.s. npm v8.1.2

5

这不是 Egg 的问题,而是 Node 的 break change,需要 Koa 那边更新。

不过看了下, Koa 的 2.13.4 里面已经有对应的 define 的了,也试了 Node 16 是没问题的,你试试 16 有没有问题。

Node 的单数版本不是 LTS,是非稳定版本,不要使用。

1

@hyj1991 为什么需要这样操作?我升级了 egg 依赖之后执行了 npm ci,也是报错

可以看下这个 https://github.com/koajs/koa/pull/1588

Koa 修复了 DEP0148,这个 dep 在 v17 之前 runtime 只是输出一个 warning 信息,v17 开始直接 runtime 直接 abort 了,所以你要重新安装下依赖升级下 koa 的版本

6

@hyj1991 为什么需要这样操作?我升级了 egg 依赖之后执行了 npm ci,也是报错

可以看下这个 koajs/koa#1588

Koa 修复了 DEP0148,这个 dep 在 v17 之前 runtime 只是输出一个 warning 信息,v17 开始直接 runtime 直接 abort 了,所以你要重新安装下依赖升级下 koa 的版本

这不是 Egg 的问题,而是 Node 的 break change,需要 Koa 那边更新。

不过看了下, Koa 的 2.13.4 里面已经有对应的 define 的了,也试了 Node 16 是没问题的,你试试 16 有没有问题。

Node 的单数版本不是 LTS,是非稳定版本,不要使用。

明白了,谢谢

9

和天猪说的一样,奇数版本不推荐使用,解决了这个 koa 导致的 abort,也会因为 https://github.com/eggjs/egg/issues/4798#issuecomment-970149671 提到的 runtime 自身大版本升级的 break 引发的流编程先后顺序逻辑错误导致 egg 启动失败

奇数版本因为有很多实验性的特性,下游依赖不一定会去修复兼容,先使用最新的 LTS 版本 v16.x

8

egg 引入 koa 是 semver 的,重新安装依赖即可,自动更新到最新。

4

在 m1 的 Macos 12 下,使用 node 17.2 有同样的问题, 已经是最新版本了

4

永远永远不要用单数版本的 Node

1

降级到 node 16.13,解决了问题