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

Node.js报错:Cannot use import statement outside a module 求助

解决SyntaxError: Cannot use import statement outside a module问题

这个错误我太熟了!本质是Node.js默认采用CommonJS模块系统(用require/module.exports),但你代码里混合了ES模块的import/export语法,导致Node搞不清该怎么处理模块加载。给你两个靠谱的解决方案,选一个适合你的就行:

方案一:统一使用ES模块

这种方式需要让Node把所有.js文件都当作ES模块处理,步骤如下:

  1. 在项目根目录的package.json中添加一行配置:
    "type": "module"
    
  2. 把所有require语句替换成ES模块的import语法,注意ES模块导入需要显式加文件后缀,导入JSON还要加类型声明:
    • 修改detailsPage.js里的导入:
      // 替换原来的require
      import utils from "../utils/utils.js";
      import { assert } from 'chai'; // 不用写node_modules路径,Node会自动查找
      import userData from '../globalContent.json' assert { type: 'json' };
      
    • 修改detailsPageObj.js里的导入:
      // 替换原来的require
      import utils from "../utils/utils.js";
      import userData from '../globalContent.json' assert { type: 'json' };
      

方案二:统一使用CommonJS模块

这种方式把所有ES模块语法改成CommonJS风格,步骤如下:

  1. 修改detailsPage.js里的ES导入:
    // 替换原来的import
    const { DetailsPage } = require('../tests/detailsPageObj');
    
  2. 修改detailsPageObj.js里的ES语法:
    // 替换原来的import
    const { element, by } = require('protractor');
    // 替换原来的export
    class DetailsPage {
        // 你的类代码保持不变
    }
    module.exports = { DetailsPage };
    
    这里的require导入JSON可以保持原样,不需要额外修改。

额外注意事项

  • 如果使用Protractor,记得同步调整配置文件(比如protractor.conf.js)的模块语法,避免出现新的加载错误。
  • 尽量不要在同一个项目里混合两种模块语法,否则很容易出现类似的兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 20:42:41