无法使用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
相关产品推荐
相关产品推荐

