添加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
相关产品推荐
相关产品推荐

