NodeJS使用ES6实验性模块+Express启动报错排查求助
排查ES6模块+Express服务器启动失败的常见细节
先给你列几个最容易遗漏的点,都是我踩过的坑:
必须在
package.json中声明模块类型
Node.js默认采用CommonJS模块规范,要启用ES6模块,你需要在项目根目录的package.json里添加一行:{ "type": "module" }要是之前的项目有这个配置,现在不小心删掉了,就会直接触发模块语法错误。
导入语法和路径要符合ES模块规则
别再用require()了,必须换成import,而且相对路径必须带完整后缀(比如.js),举个最简测试代码的正确写法:import express from 'express'; const app = express(); app.get('/', (req, res) => { res.send('Test Server Running!'); }); app.listen(3000, () => { console.log('Listening on port 3000'); });比如你导入本地路由文件,得写
import router from './routes.js',不能省略.js,这是ES模块的硬性要求。别再用过时的
--experimental-modulesflag
从Node.js 13.2.0版本开始,ES模块已经是稳定特性了,不需要再加这个实验性标志。如果你的Node版本是16+的LTS版,直接用node src/app.js启动就行,老版本的实验性模块可能有兼容性问题,建议升级到稳定版。文件后缀名的兜底方案
要是你不想改package.json,可以把你的ES模块文件后缀改成.mjs,比如app.mjs,启动命令对应改成node src/app.mjs(旧版本可能还是需要加--experimental-modules)。
另外,建议把完整的错误信息贴出来,比如后面的SyntaxError内容,能更快定位问题,但先按上面的点排查基本能解决大部分情况。
内容的提问来源于stack exchange,提问作者Elie G.
相关产品推荐
相关产品推荐

