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

Node.js使用require引入含import的JS模块报错该如何解决?

问题解决方案

报错原因

你要引入的simple_math/index.js属于ES模块(ESM)规范,内部使用import语法导入依赖,而你当前的脚本默认是CommonJS规范,不能直接用require导入ESM格式的模块,因此触发语法错误。

可选解决方案

  • 方案1:将自己的脚本改为ESM规范
    操作步骤:

    1. 确保你使用的Node.js版本 >= 14.13(该版本开始稳定支持ESM规范)
    2. 二选一完成配置:
      • 把你的脚本文件后缀改为.mjs
      • 或者在项目根目录的package.json文件中添加顶级字段 "type": "module"
    3. 修改脚本代码为ESM导入语法,注意本地模块导入必须补全.js后缀:
    #!/usr/bin/env node
    
    import { pi } from './simple_math/index.js'
    console.log(pi)
    
  • 方案2:不改动脚本规范,使用动态import()导入ESM模块
    CommonJS规范支持调用动态import()方法,该方法返回Promise,你可以用链式调用或者async/await写法接收导出的常量:
    链式调用写法:

    #!/usr/bin/env node
    
    import('./simple_math/index.js').then(simpleMath => {
      console.log(simpleMath.pi)
    })
    

    async/await简化写法:

    #!/usr/bin/env node
    
    (async () => {
      const { pi } = await import('./simple_math/index.js')
      console.log(pi)
    })()
    
  • 可选方案:如果simple_math是你自己维护的模块,可以将其编译为同时支持ESM和CommonJS的同构模块,后续两种规范的脚本都可以直接导入,第三方依赖无需做此改动。

内容的提问来源于stack exchange,提问作者David Davó

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:54:03