You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加type:module仍报SyntaxError:无法在模块外使用import语句求助

问题:无法在模块外使用import语句,已尝试添加"type": "module"仍无效

我已经研究过这个错误——理论上在package.json里加"type": "module"或者把js文件改成.mjs就能修复,但两种方法都没用。求帮忙!我一直搞不懂为什么会出现这个错误:

import app from './server.js'; SyntaxError: Cannot use import statement outside a module

另外所有文件都在同一个文件夹里,应该不存在路径问题。

代码文件内容

Index.js

import app from './server.js';
import mongodb from "mongodb";
import dotenv from "dotenv";

async function main(){
    
    dotenv.config();

    const client = new mongodb.MongoClient(
        preocess.env.MOVIEREVIEWS_DB_URI
    );

    const port = process.env.PORT || 8000;

    try {
        await client.connect()
        app.listen(port, () => {
            console.log('server is running on port: ' + port);
        });
    }catch(e){
        console.error(e);
        process.exit(1)
    }
}
main().catch(console.error);

server.js

import express from 'express';
import cors from 'cors';
import movies from './api/movies.route.js';

const app = express();

app.use(cors());
app.use(express.json());

app.use("api/v1/movies", movies);
app.use("*", (req, res) => {
    res.status(404).json({error: "not found"});
});

export default app;

package.json

{
  "name": "backend",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "type": "module",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "cors": "^2.8.5",
    "dotenv": "^16.0.3",
    "express": "^4.18.1",
    "mongodb": "^4.10.0"
  }
}

排查修复方案

  • 升级Node.js版本:确保使用14.13.0及以上的Node.js版本,低版本对ES模块支持存在缺陷。终端输入node -v查看版本,版本不足直接升级到LTS版。
  • 确认package.json位置:必须和index.js放在同一个根目录下,否则Node.js无法读取"type": "module"配置,会默认将文件当作CommonJS模块处理。
  • 修正拼写错误:index.js里的preocess.env.MOVIEREVIEWS_DB_URI少了一个's',改成process.env.MOVIEREVIEWS_DB_URI,虽然这不是import错误的直接原因,但能避免后续数据库连接问题。
  • 检查启动命令:直接用node index.js启动项目,不要使用旧工具或自定义脚本绕开Node.js的模块识别逻辑;如果用nodemon等工具,确保它没有覆盖模块模式配置。
  • 清除缓存:删除项目根目录下的node_modules/.cache文件夹(如果存在),或者重启终端后重新运行项目,避免Node.js缓存旧的模块配置。
  • 统一文件扩展名:保持所有文件使用.js后缀,不要混用.js和.mjs,防止模块识别逻辑混乱。

内容的提问来源于stack exchange,提问作者kanulilewa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 19:25:23