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

Node.js中使用通配符*导入模块时出现语法错误求助

Node.js中import * as foo语句报Unexpected token *的原因及解决

当执行import * as foo from './bar.mjs'并通过node testMod.mjs运行代码时,出现如下语法错误:

$ node testMod.mjs
/home/user/node-web-dev/testMod.mjs:1
import  *  as foo from './bar.mjs';
        ^

SyntaxError: Unexpected token *
    at Module._compile (internal/modules/cjs/loader.js:723:23)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)
    at startup (internal/bootstrap/node.js:283:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:623:3)    

测试代码如下:

import  *  as foo from './bar.mjs';

console.log(foo.hello());
console.log(`${foo.next()} ${foo.squared()}`);

console.log(`${foo.next()} ${foo.squared()}`);

console.log(`${foo.default()} ${foo.squared()}`);

console.log(`${foo.next()} ${foo.squared()}`);

console.log(`${foo.next()} ${foo.squared()}`);

console.log(`${foo.next()} ${foo.squared()}`);

console.log(foo.meaning);

错误原因

这个错误的核心是Node.js把你的.mjs文件当成了CommonJS(CJS)模块加载,而CJS模块不支持ES模块的import *语法。从报错栈中的internal/modules/cjs/loader.js可以看出,Node.js使用的是CJS模块加载器,而非ES模块加载器。

导致该问题的常见场景:

  • Node.js版本过低:Node.js 13.2.0之前,ES模块支持处于实验阶段,需添加--experimental-modules flag才能启用;版本低于10.16.0则完全不支持.mjs扩展名的ES模块识别。
  • 文件扩展名异常:实际文件扩展名被误改(比如改成.js),或文件系统隐藏扩展名导致实际后缀不符合预期。
  • 配置冲突:项目根目录的package.json设置了"type": "commonjs",且测试文件扩展名是.js(而非.mjs),会强制用CJS加载;不过.mjs扩展名优先级高于type字段,这种情况较少见。

解决方法

  • 升级Node.js版本:建议升级到14.x及以上的LTS版本,该版本起ES模块支持完全稳定,无需额外flag,直接运行.mjs文件即可。
  • 确认文件扩展名:检查testMod.mjs和bar.mjs的实际扩展名,确保未被误改,且文件系统未隐藏扩展名。
  • 低版本兼容方案:若无法升级Node.js,在10.16.0~13.1.0版本区间,运行时需添加实验性flag:
    node --experimental-modules testMod.mjs
    
  • 统一模块配置:若项目需全量使用ES模块,可在根目录package.json中添加"type": "module",这样所有.js文件也会被当作ES模块加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 03:46:04