在DigitalOcean Ubuntu服务器用pm2启动App.js遇模块导入语法错误
解决 "Cannot use import statement outside a module" 报错
问题原因
你的代码使用了ES模块的import语法,但Node.js默认以CommonJS(CJS)模式加载文件,导致语法不兼容报错。
解决方案
方法1:将项目设置为ES模块模式
在项目根目录的package.json中添加"type": "module"配置:
{ "name": "your-project-name", "version": "1.0.0", "type": "module", // 其他原有配置... }
修改完成后重启PM2进程:
pm2 restart App.js
方法2:修改文件后缀为.mjs
将使用import语法的文件后缀从.js改为.mjs(比如index.js改为index.mjs),同时更新App.js中对应的引用路径,之后重启PM2。
方法3:构建React项目后再启动(推荐)
React项目需要先编译成可执行的生产代码,不能直接运行src目录下的源文件:
- 执行构建命令(以create-react-app为例):
npm run build
- 全局安装静态服务工具
serve:
npm install -g serve
- 用PM2启动构建后的服务:
pm2 start serve --name "react-app" -- -s build
报错日志原文
/var/www/project/src/index.js:1 0|src | import React from 'react'; 0|src | ^^^^^^ 0|src | 0|src | SyntaxError: Cannot use import statement outside a module 0|src | at wrapSafe (internal/modules/cjs/loader.js:1001:16) 0|src | at Module._compile (internal/modules/cjs/loader.js:1049:27) 0|src | at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10) 0|src | at Module.load (internal/modules/cjs/loader.js:950:32) 0|src | at Function.Module._load (internal/modules/cjs/loader.js:790:12) 0|src | at Object.<anonymous> (/usr/lib/node_modules/pm2/lib/ProcessContainerFork.js:33:23) 0|src | at Module._compile (internal/modules/cjs/loader.js:1085:14) 0|src | at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10) 0|src | at Module.load (internal/modules/cjs/loader.js:950:32) 0|src | at Function.Module._load (internal/modules/cjs/loader.js:790:12)
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

