运行JS文件时出现ES模块导入错误,请求技术协助
解决Node.js中
import语句无法使用的问题 错误原因
你碰到的SyntaxError: Cannot use import statement outside a module,是因为Node.js默认采用CommonJS模块规范,而你使用了ES模块的import/export语法,必须明确告知Node.js当前文件是ES模块才能正常解析。
场景1:React结合HTML的项目
你的React项目不需要用Node.js运行——因为你已经通过CDN引入了React、ReactDOM和Babel,代码是在浏览器环境中执行的,直接运行HTML文件即可:
- 找到你的HTML文件,双击打开,或者用VSCode的
Live Server插件启动(右键HTML文件选"Open with Live Server") - 不要点击VSCode的运行按钮(这个按钮是用Node.js执行JS文件,而Node.js没有浏览器的DOM环境,也不会处理你依赖的Babel转译JSX逻辑,直接跑会报错)
你的React代码本身没问题,只要在浏览器里打开HTML就能看到Hello, everyone!的效果。
场景2:使用import/export的模块项目
如果要在Node.js里运行你的player模块代码,有两种简单的解决方法:
方法1:配置package.json启用ES模块
- 在项目根目录新建(或修改)
package.json文件,添加"type": "module":
{ "type": "module" }
- 修复代码里的两个错误:
- 把index.js第一行的多余
true删掉,并且导入路径要加./(ES模块要求相对路径):import { player } from './player.js'; - 把player.js里的
thiscountry改成this.country(拼写错误):console.log(`${this.name} was born in ${this.country}`)
- 把index.js第一行的多余
- 重新用VSCode运行按钮执行index.js,就能正常输出结果。
方法2:修改文件扩展名
- 把
index.js改名为index.mjs,player.js改名为player.mjs - 同样修复代码里的
true和thiscountry错误,导入路径改成./player.mjs - 运行
node index.mjs即可执行脚本
内容的提问来源于stack exchange,提问作者understan
相关产品推荐
相关产品推荐

