运行React应用前执行Node脚本报错:Cannot use import statement outside a module
解决"Cannot use import statement outside a module"报错问题
这个错误是因为Node.js默认不支持直接运行使用ES模块语法(import)的TypeScript文件,同时未对TS代码做转译处理。以下是几种可行的解决办法:
方法1:使用ts-node直接运行TS文件
ts-node可以直接解析并执行TypeScript代码,无需提前编译。
- 先安装依赖(如果项目里还没装):
npm install -D ts-node typescript - 修改npm脚本中的命令,把
node seedApp.ts替换成ts-node seedApp.ts,修改后的脚本如下:"web-dev-test-manually": "NODE_ENV=localApp ts-node seedApp.ts && yarn lint && yarn copyData && yarn compile-server && yarn start-static-server & node_modules/.bin/webpack-dev-server -d --watch",
方法2:改用CommonJS语法(修改代码)
把seedApp.ts里的ES模块语法换成CommonJS的require,这样Node.js可以直接识别:
const { setupDatabase } = require('../Database/SeedApp'); (async () => { await setupDatabase(['appdev/seed.companies.sql', 'appdev/seed.crafters.sql']); })();
如果要保留TS语法,也可以先通过tsc编译成JS文件,再用node运行编译后的文件(比如node dist/seedApp.js),前提是tsconfig.json里的module设置为CommonJS。
方法3:配置Node.js支持ES模块+TS
如果项目想使用ES模块系统,可以按以下步骤配置:
- 在项目根目录的
package.json中添加:"type": "module" - 修改
tsconfig.json的compilerOptions:{ "compilerOptions": { "module": "ESNext", "moduleResolution": "NodeNext", "target": "ES2020", "esModuleInterop": true } } - 安装必要依赖:
npm install -D ts-node typescript @types/node - 修改npm脚本中的命令为:
ts-node --esm seedApp.ts
注意事项
- 确保项目根目录有
tsconfig.json文件,TypeScript会依据它来编译代码。 - 如果使用方法1或3,ts-node会自动读取
tsconfig.json的配置,所以要保证配置符合项目需求。
内容的提问来源于stack exchange,提问作者PositiveGuy
相关产品推荐
相关产品推荐

