Nodejs: nodemon 监听 node 服务时,有个打开浏览器的动作,导致每次都打开浏览器新标签,只想打开一次
Nodejs: nodemon 监听 node 服务时,有个打开浏览器的动作,导致每次都打开浏览器新标签,只想打开一次
我在用 nodemon 来 watch node 服务,代码里调用了自动在浏览器打开项目的方法,导致每次 ctrl+s 的时候都打开新标签页
我想到的解决办法:
- watch node 服务的时候不打开新的浏览器标签页;(这不是我想要的)
- 在服务外设置一个标志,以表示是第几次启动服务;(可行,但是不太合理)
- 监听进程(好像行不通,因为 pm2 每次都重启了 node 服务,进程都没了)
- 监听浏览器子进程(太复杂)
求解决方法(在公司里有个构建工具是可以实现的,但是现在看不到源码了,只能求助)
回归正题:这是我提交给 node-open 作者的 issue
作者好像不鸟我们,求帮忙解决一下
如何判断这次保存时你是想打开新标签页还是不想打开新标签页?
不想打开新标签页.也就是说,第一次用 nodemon 启动 node 服务的时候打开,然后 ctrl+s 的时候不要打开新的标签页了,只启动 node 服务
直接用 nodemon 不就好了吗? nodemon app.js
我有个不成熟的想法不知道适不适合:
1 、使用 pre- 钩子来打开标签页
2 、源代码当中打开浏览器的动作改成刷新页面
"scripts": {
“predev”: open xxx,
“dev”: “nodemon app.js”
}
这样 npm run dev 的时候先打开了标签页,然后运行代码时刷新页面,每次进行保存也只是触发刷新页面的动作。
网页上在调用 window.open 的时候接受一个 target (就是 a 的 target 属性)
如果前后两次调用传入了同一个名字,就会在相同的网页标签下打开。
不知道 Chrome 、 Firefox 等等浏览器是否支持命令行传入这个参数,支持的话这个问题就好办了
你用一下 open 这个 npm 依赖就知道了,nodemon app.js, app.js 里有一段代码是打开浏览器标签页,nodemon 每次启动 app.js,都会触发这个动作…那就无解了
额,这就是比手动在浏览器打开标签好了一点.但是这里面也有个问题,我是 open(‘http://’+IP+’:’+PORT)这样打开的…所以在 package.json 写不好…
在 Node.js 开发中,使用 nodemon
来监听文件变化并自动重启服务器是很常见的做法。如果你希望在项目启动时只打开一次浏览器,而不是每次文件更改时都打开一个新标签,可以通过在 nodemon
的配置脚本中做一些调整来实现。
首先,你可以通过 nodemon
的 --exec
选项来执行一个自定义的 shell 脚本,该脚本负责启动服务器并在首次启动时打开浏览器。以下是一个简单的实现:
- 创建一个 shell 脚本文件,例如
start.sh
:
#!/bin/bash
# 启动 Node.js 服务
node your_app.js &
NODE_PID=$!
# 检查是否是首次运行(通过检查某个文件是否存在)
if [ ! -f .browser_opened ]; then
# 打开浏览器
open http://localhost:3000
# 标记为已打开
touch .browser_opened
fi
# 等待 Node.js 服务退出
wait $NODE_PID
- 确保
start.sh
文件具有执行权限:
chmod +x start.sh
- 在
package.json
中配置nodemon
使用这个脚本:
"scripts": {
"start": "nodemon --exec ./start.sh"
}
- 现在,运行
npm start
时,nodemon
将通过start.sh
脚本启动服务器,并且只在首次运行时打开浏览器。
这样,你就可以避免每次文件更改时都打开新浏览器标签的问题了。