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

Node REPL中package.json加载时机及ES模块导入报错问题

Node.js REPL中package.json的加载时机问题

问题场景

在Node REPL中执行以下代码:

process.chdri('M://source/MySite')
let queries = await import('./src/graphql/queries.js')

执行后触发语法错误:

export const getCompanySingleTable = /* GraphQL */ `
^^^^^^

Uncaught SyntaxError: Unexpected token 'export'

已知目标目录M://source/MySite下的package.json已配置:

"type": "module"

推测报错原因是package.json未被识别为当前目录的配置文件,核心疑问:package.json的加载时机是在REPL启动时查找,还是在执行动态导入操作时查找?

核心结论与解释

Node.js中package.json的type字段(决定模块系统类型)是在REPL启动时就读取并确定的,后续在REPL中通过process.chdir()切换工作目录,不会重新加载新目录下的package.json配置。

具体原因:

  • REPL启动时,会扫描当前启动目录的package.json,根据type字段设置默认的模块解析规则(默认是CommonJS,若type: module则为ES模块)。
  • 当你在REPL中切换目录后,Node不会重新检测新目录的package.json,所以动态导入ES模块文件时,依然会以启动时的CommonJS规则解析,自然无法识别export语法,导致报错。

解决办法

  • 直接在目标目录M://source/MySite下启动REPL:打开终端进入该目录后执行node命令,启动时就会读取该目录的package.json,自动启用ES模块模式,动态导入可正常执行。
  • 强制以ES模块模式启动REPL:执行node --input-type=module命令启动REPL,此时无论当前目录是否有package.json,都会以ES模块规则解析代码,export语法可正常识别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 20:20:12