如何在Node.js项目中使用第三方库并解决ES6模块导入报错
问题根因
你遇到的Cannot use import statement outside a module报错本质是运行环境未将当前文件识别为ES模块,结合你提供的配置,常见触发原因如下:
- Node.js版本过低:ES模块规范在Node.js 12.x版本中为实验性功能,14.x及以上LTS版本才实现稳定支持,版本过低会导致
"type": "module"配置不生效 - 执行方式错误:如果你直接通过浏览器打开
app.mjs文件,浏览器默认将JS文件识别为普通脚本而非模块,会触发该报错,Node.js脚本必须通过node命令执行 - 入口文件后缀异常:Windows系统默认隐藏已知文件后缀,你可能将文件命名为了
app.mjs.txt,实际后缀为.txt而非.mjs,导致模块识别失败 - 第三方依赖冲突:你安装的
http包是官方废弃的占位包,并非Node.js内置http模块,异常依赖可能影响模块加载逻辑
解决步骤
- 执行
node -v查看Node.js版本,若版本低于14.x,升级到Node.js LTS正式版即可 - 执行
node app.mjs命令启动项目,禁止直接在浏览器中打开本地JS文件运行Node服务 - 开启系统文件后缀显示功能,确认入口文件实际后缀为
.mjs,删除多余的隐藏后缀 - 删除package.json中dependencies配置项里的
"http": "^0.0.1-security",执行npm install重新安装依赖,Node.js内置http模块无需手动安装第三方包
避坑规范
- 项目确定使用ES模块规范后,统一在package.json中声明
"type": "module",所有业务脚本统一使用.js后缀即可,无需额外使用.mjs后缀 - 不要混用模块规范:配置
"type": "module"的项目全程使用import/export语法,不要使用require/module.exports等CommonJS语法;未声明该配置的项目默认遵循CommonJS规范,不要使用ES模块语法 - Node.js内置模块(http、fs、path等)可直接导入,无需通过npm安装第三方同名包
- 初始化项目前优先确认Node.js版本符合开发要求,生产环境建议统一使用LTS版本的Node.js运行环境
内容的提问来源于stack exchange,提问作者OK 400
相关产品推荐
相关产品推荐

