配置type:module后使用PM2部署Node项目仍报import语句模块外使用错误
PM2部署Node项目配置"type":"module"后仍报import语法错误解决方案
报错原因
你已在package.json中配置"type": "module",但项目入口代码中同时混用了CommonJS规范的require语法和ES Module规范的import语法,且PM2缓存的旧进程未读取最新的项目配置,触发模块类型不兼容报错。
修复步骤
- 第一步:统一所有导入语法为ES Module规范,将你现有代码中的CommonJS导入语句替换为如下写法:
import http from 'node:http'; import url from 'node:url'; import querystring from 'node:querystring';
其余代码无需改动,保持你现有import captureWebsite from 'capture-website'的写法即可。
- 第二步:清除PM2缓存的旧进程,执行命令:
pm2 delete 你的项目进程名/进程ID
如果不清楚进程ID,可执行pm2 list查看所有运行中的进程。 - 第三步:重新启动项目,直接启动可执行:
pm2 start 你的入口文件名.js
如果仍有报错,可添加PM2运行参数指定模块类型:pm2 start 你的入口文件名.js --interpreter-args="--input-type=module"
也可以创建PM2配置文件固定启动参数,示例配置ecosystem.config.js内容如下:
export default { apps : [{ name: "自定义项目名称", script: "./你的入口文件名.js", interpreter: "node", interpreter_args: "--input-type=module" }] }
配置完成后执行pm2 start ecosystem.config.js启动即可。
注意事项
配置了"type": "module"的Node项目不允许混用require和import语法,所有模块导入统一使用import即可,Node会自动识别内置模块、第三方依赖模块的导入规则。
内容的提问来源于stack exchange,提问作者jefiwo
相关产品推荐
相关产品推荐

