Node.js主文件放src目录运行npm start报Cannot find module如何解决
报错原因
执行npm start触发Cannot find module报错的核心原因是启动脚本路径配置错误:
你当前package.json中start脚本写的是nodemon 'server.js',nodemon执行时默认从项目根目录(即D:\utalk-project\server\)查找目标文件,但你的server.js存放在src目录下,根目录不存在对应文件自然触发报错。此外你配置的main字段开头多了前置斜杠,路径写法不符合Node.js的解析规则,也会引发潜在的路径识别问题。
修复方案
按以下步骤修改配置即可在保留server.js存于src文件夹的前提下正常启动服务:
- 修改
package.json中的两处配置:- 修正
main字段的路径,去掉开头多余的斜杠 - 修正
start脚本的执行路径,指向src目录下的server.js,同时去掉路径上多余的单引号
修改后的核心配置段如下,其余依赖配置保持原样不需要改动:
{ "name": "server", "version": "1.0.0", "description": "", "main": "src/server.js", "type": "module", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "nodemon src/server.js" }, // dependencies、devDependencies 原有内容保持不变 } - 修正
- 检查
server.js内的引用路径:你当前写的./models/router.js、./config/connectDB.js都是以server.js所在的src目录为相对起点,和目录结构匹配,不需要额外修改。 - 回到项目根目录重新执行
npm start,服务即可正常启动。
额外提示:你项目中安装了
sequelize-cli,后续如果使用cli做迁移、生成种子文件,记得在根目录新建.sequelizerc配置文件,指定config、models、migrations、seeders的路径都指向src下的对应目录,避免cli默认从根目录查找文件触发新的报错。
内容的提问来源于stack exchange,提问作者Zombani
相关产品推荐
相关产品推荐

