Redux导入报错:SyntaxError: Cannot use import statement outside a module
Redux导入报错:SyntaxError: Cannot use import statement outside a module
错误原因
- 模块系统不兼容:Node.js默认使用CommonJS模块规范(通过
require导入依赖),而import属于ES模块语法,默认环境下Node.js不会解析该语法,直接使用就会触发报错。 - 变量重复声明:你同时使用
import redux from "redux"和const redux = require("redux"),会导致redux变量被重复定义,即便解决模块问题,也会引发新的语法错误。
解决方案
方案1:使用CommonJS规范(无需额外配置)
删除import语句,仅保留CommonJS导入方式,这也是多数Redux入门教程的默认写法:
// 移除 import redux from "redux"; const redux = require("redux") const createStore = redux.legacy_createStore // 后续代码保持不变...
修改完成后直接用Node.js运行脚本即可。
方案2:切换为ES模块规范
如果偏好ES模块的import语法,需要做以下两步修改:
- 删除
require语句,保留ES模块导入:
import redux from "redux"; // 移除 const redux = require("redux") const createStore = redux.legacy_createStore // 后续代码保持不变...
- 在项目的
package.json中添加"type": "module"字段,告知Node.js当前项目采用ES模块:
{ "type": "module" }
或者将脚本文件后缀从.js改为.mjs,也能让Node.js按ES模块规则解析文件。
额外优化提示
你的reducer函数存在一个可优化点:更新状态时建议先展开原状态再修改目标属性(即便当前state只有numOfCakes),养成符合Redux规范的状态更新习惯:
const reducer = (state = initialState, action) => { switch(action.type) { case CAKE_ORDERED: return { ...state, // 展开原状态所有属性,避免丢失其他状态 numOfCakes: state.numOfCakes - 1 } default: return state } }
内容的提问来源于stack exchange,提问作者RossieRee
相关产品推荐
相关产品推荐

