使用nodemon启动双服务器遇MODULE_NOT_FOUND错误求助
解决思路:同时启动两个Node服务器的问题
嘿,我来帮你理清楚这个问题的解决思路~
首先得说你当前scripts里的&&是个小坑:它是串行执行的意思——只有第一个命令(node server.js)完全退出且执行成功后,才会跑第二个命令。但Node服务器启动后是一直挂着的常驻进程,根本不会主动退出,所以第二个serverpage.js其实根本没机会启动。这是你尝试同时启动却出问题的核心原因之一。
再说说那个模块找不到的报错:你说单独启动两个服务器都没问题,但同时启动就报找不到login.js,这里有几个可能的排查方向:
- 虽然你启动的是
server.js,但会不会server.js里有什么条件逻辑,只有当检测到同时启动其他进程时才去加载login.js?不过这个可能性比较低; - 再检查下
server.js里引用login.js的路径是不是写错了?比如是不是写成了require('login.js')(这会去node_modules里找),而正确的应该是require('./login.js')(相对当前脚本的路径)?不过你单独启动没问题,这个概率也不高; - 还有一种可能:你执行命令时的工作目录不对?比如终端没打开在项目根目录(package.json所在的文件夹),但你说单独启动没问题,这个应该也不是。
正确的同时启动方案
要同时启动两个服务器(包括用nodemon自动重启),推荐这几种靠谱的方式:
方式一:用并行符号(适合类Unix系统/Windows Git Bash)
把&&换成&,让两个命令并行跑:
"scripts": { "start": "node server.js & node serverpage.js" }
如果要用nodemon自动重启,就改成:
"scripts": { "start": "nodemon server.js & nodemon serverpage.js" }
注意:Windows自带的cmd不支持&并行,得用PowerShell或者Git Bash才行。
方式二:用专门的进程管理工具(跨平台首选)
最稳妥的是用concurrently或者npm-run-all这类包,它们就是专门用来同时运行多个npm脚本的,跨Windows、Mac、Linux都能用。
操作步骤:
- 先安装依赖:
npm install concurrently --save-dev
- 改一下package.json的scripts,先把两个服务器的命令拆成单独的脚本,再用concurrently一起启动:
"scripts": { "server": "nodemon server.js", "serverpage": "nodemon serverpage.js", "start": "concurrently \"npm run server\" \"npm run serverpage\"" }
- 然后执行
npm start,就能同时启动两个带nodemon自动重启的服务器了,还能在终端里看到各自的日志输出。
方式三:用nodemon配置文件监控多个文件
如果你想用一个nodemon实例同时监控两个服务器文件,也可以创建个nodemon.json配置文件:
{ "watch": ["server.js", "serverpage.js"], "exec": "node server.js & node serverpage.js" }
然后把scripts改成:
"scripts": { "start": "nodemon" }
不过这种方式的灵活性不如concurrently,因为只要其中一个文件变化,两个服务器都会被重启。
额外排查小 tips
如果那个模块找不到的问题还没解决,可以试试这些:
- 在
server.js里加一行console.log(__dirname),打印当前脚本的目录,看看login.js的位置是不是和这个目录对应; - 执行
npm start时,确保终端的工作目录就是项目根目录(也就是放package.json的那个文件夹); - 实在不行就清一下缓存重装依赖:类Unix系统用
rm -rf node_modules && npm install,Windows用rd /s /q node_modules && npm install。
内容的提问来源于stack exchange,提问作者Taris
相关产品推荐
相关产品推荐

