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

无法使用import导入axios及JSON文件,但require可正常使用求解

为什么import语句报错但require()能正常运行?

这事儿本质是Node.js默认模块系统和ES模块的差异导致的,我给你拆解得明明白白:

1. Node.js默认采用CommonJS模块规范

Node.js从诞生之初就把CommonJS作为标准模块系统,require()、module.exports都是这个规范里的原生语法。你直接运行main.js时,Node.js会默认把它当成CommonJS模块处理,所以require()能顺畅工作。

2. import是ES模块(ESM)的专属语法

import/export是ES6推出的官方模块规范,但Node.js不会自动把普通.js文件识别为ES模块。如果没做任何配置就用import,Node.js会判定你在CommonJS模块里误用了ESM语法,自然就抛出SyntaxError: Cannot use import statement outside a module的错误。

3. 如何让import正常运行?

有两种常用方案可以解决这个问题:

  • 方案一:修改文件后缀为.mjs
    把main.js改名为main.mjs,Node.js会自动将这个文件识别为ES模块,此时import axios from 'axios'和import Test_data from './json/test.json'就能正常执行。
  • 方案二:在package.json中添加配置
    在项目根目录的package.json里加入"type": "module"字段:
    {
      "type": "module"
    }
    
    这样设置后,项目中所有.js文件都会被Node.js当作ES模块处理,你就能放心使用import语法了。

额外提醒:如果用了"type": "module",那CommonJS的require()就不能再用了,得统一切换为ESM语法;反之,没设置type的话,.js文件默认是CommonJS模块,只能用require()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 07:47:38