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

Node.js中ES6模块无法正常运行问题求助

解决Node.js v9.10.1中使用--experimental-modules运行Transcrypt生成ES6模块的问题

我之前也碰到过类似的情况,Node.js v9.x的实验性ES模块特性确实有不少坑,结合Transcrypt生成的代码,咱们可以从这几个方向排查解决:

1. 修正文件扩展名

Node.js v9.10.1的实验性ES模块只认.mjs扩展名的文件,默认Transcrypt生成的可能是.js,这会导致Node把它当成CommonJS模块处理,和你的预期冲突。你可以:

  • 把生成的模块文件重命名为.mjs
  • 然后用这个命令运行:
node --experimental-modules your-module.mjs

2. 调整import语句的路径格式

早期Node.js实验模块要求import必须带完整的文件扩展名,不能省略。你打开Transcrypt生成的代码看看,比如如果有import {__envir__} from './some-module'这种写法,得改成import {__envir__} from './some-module.mjs'。要是不想手动改,可以看看Transcrypt的编译参数里有没有能自动生成带扩展名import的选项。

3. 处理模块作用域的差异

在ES模块里,顶级作用域不是全局作用域,你代码里的var time = {};这种顶级变量只会在当前模块内有效,不会挂载到global对象上。如果你的代码里有其他地方依赖这个全局的time,就得把它改成模块导出:

export const time = {};

然后在需要用的地方import进来。

4. 考虑版本兼容性

Node.js v9.10.1的ES模块支持还非常初级,bug很多。如果上面的方法都搞不定,要么换个Transcrypt兼容的Node.js版本,要么升级到Node.js 12及以上版本——这时候ES模块已经稳定很多,适配起来会更省心。

5. 确认Transcrypt的编译配置

你用的是Transcrypt的modules分支,得确保编译时启用了正确的ES6模块生成选项。比如编译命令里加上--es6或者对应的参数,让它生成符合Node.js实验模块要求的代码。可以看看Transcrypt本地的分支文档,确认配置没出错。

内容的提问来源于stack exchange,提问作者Jacques de Hooge

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:24:18