Nodejs: nodemon 监听 node 服务时,有个打开浏览器的动作,导致每次都打开浏览器新标签,只想打开一次

Nodejs: nodemon 监听 node 服务时,有个打开浏览器的动作,导致每次都打开浏览器新标签,只想打开一次

我在用 nodemon 来 watch node 服务,代码里调用了自动在浏览器打开项目的方法,导致每次 ctrl+s 的时候都打开新标签页

我想到的解决办法:

  1. watch node 服务的时候不打开新的浏览器标签页;(这不是我想要的)
  2. 在服务外设置一个标志,以表示是第几次启动服务;(可行,但是不太合理)
  3. 监听进程(好像行不通,因为 pm2 每次都重启了 node 服务,进程都没了)
  4. 监听浏览器子进程(太复杂)

求解决方法(在公司里有个构建工具是可以实现的,但是现在看不到源码了,只能求助)

回归正题:这是我提交给 node-open 作者的 issue

作者好像不鸟我们,求帮忙解决一下


8 回复

如何判断这次保存时你是想打开新标签页还是不想打开新标签页?


不想打开新标签页.也就是说,第一次用 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 脚本,该脚本负责启动服务器并在首次启动时打开浏览器。以下是一个简单的实现:

  1. 创建一个 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
  1. 确保 start.sh 文件具有执行权限:
chmod +x start.sh
  1. package.json 中配置 nodemon 使用这个脚本:
"scripts": {
    "start": "nodemon --exec ./start.sh"
}
  1. 现在,运行 npm start 时,nodemon 将通过 start.sh 脚本启动服务器,并且只在首次运行时打开浏览器。

这样,你就可以避免每次文件更改时都打开新浏览器标签的问题了。

回到顶部