Nodemon + babel多次重启服务器

时间:2016-10-07 12:29:32

标签: node.js babel nodemon babel-node

在我的 package.json 中,我有一个启动脚本,我正用于我的开发环境。它看起来像这样:

"scripts": {
    "dev": "NODE_PATH=src nodemon --watch src/ --exec babel-node src/app.js"
}

当我点击npm run dev时,一切正常,巴贝尔正在发布应有的一切,并且nodemon开始观看。我明白这一点:

[nodemon] 1.11.0
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: /Users/Jonathan/Documents/swissnet/src/**/*
[nodemon] starting `babel-node src/app.js`

当我在src / -folder节点中保存文件时,将重新启动服务器。但这是我的问题,它重启2-3次......每次我保存一个文件,它看起来像这样:

[nodemon] restarting due to changes...
[nodemon] starting `babel-node src/app.js`
[nodemon] restarting due to changes...
[nodemon] starting `babel-node src/app.js`
[nodemon] restarting due to changes...
[nodemon] starting `babel-node src/app.js`

如果我输入“rs”,则nodemon会按预期重新启动一次。

我不知道如何解决这个问题,甚至不知道在哪里寻找答案。我试过去谷歌吧。我一直在访问github上的软件包的bug部分...(也许我只是在谷歌上搜索) 这是我为同一问题找到的唯一链接,但它似乎没有答案:Nodemon runs multiple times on save when using babel
我无论如何都尝试了他的脚本NODE_PATH=src nodemon src --exec babel -w src/ --out-dir build/ --source-maps,但同样的事情发生了,重启两次或三次。

就像@Connorelsea在上面链接中提供的答案的评论部分中所述,如果我添加--delay 2.5,它只会重启一次。

我想也许当我在观看文件中点击保存时,nodemon立即重启并且babel开始转换。当babel完成时,由于对src / -folder进行了更改,因此节省了一堆om转换文件并且nodemon再次重启。但我不知道如何调试它。

希望你们能帮助我!

****编辑****

刚刚找到这个https://github.com/remy/nodemon/issues/508,但他们唯一的解决方案是“升级nodemon”。我现在有最新的1.11.0。

6 个答案:

答案 0 :(得分:10)

所以,现在几个月后我发现了什么是错的。似乎服务器只是在我保存时重新启动一次,并且当babel在文件更新后几秒钟后转换代码时再次重启。 所以正是包babel-node给了我这种不受欢迎的行为。它适用于nodemon延迟2秒--delay 2或更长时间。

答案 1 :(得分:5)

以防万一有人像我一样偶然发现这个问题。

虽然延迟有效,但之所以有效,是因为构建时间通常少于2秒。

这可能会导致它变得胡须,或者比需要的时间更长。

正确的解决方案是实际上忽略nodemon中的输出目录或文件。

NODE_PATH=src nodemon --watch src/ --exec babel-node src/app.js --out-file dist/app.js -- dist/app.js

答案 2 :(得分:3)

您应该使用babel-node作为执行者,如下所示:

nodemon ./index.js --exec babel-node

答案 3 :(得分:1)

有一个选项可以在“监视”模式下使用Babel构建文件,让Nodemon仅监视“构建”文件夹,并在更改编译输出后重新启动应用程序。

{
  "name": "app",
  "version": "1.0.0",
  "private": true,
  "dependencies": {},
  "devDependencies": {
    "@babel/cli": "^7.6.0",
    "@babel/core": "^7.6.0",
    "@babel/preset-env": "^7.6.0",
    "nodemon": "^1.19.2"
  },
  "scripts": {
    "build": "babel src --out-dir build --source-maps=inline --verbose",
    "start": "yarn build --watch & sleep 1 && nodemon --watch build build/index.js"
  }
}

enter image description here

此示例摘自GitHub上的GraphQL API Examples存储库。

答案 4 :(得分:0)

起初,我正在加载第一个babel版本,然后并行启动启用了--skip-initial-build选项和nodemon的babel手表,

但是最后,我发现更好的解决方法是使自己的babel观察器具有以下优点:

  • 考虑到删除和其他事件,使所有内容保持同步

  • 允许我添加@compileDependencies批注系统(请参见https://github.com/kentcdodds/babel-plugin-preval/issues/19

  • 修复了由@ babel / cli watcher官方使用的chokidar的awaitWriteFinish选项引起的观看错误(使用我最喜欢的编辑器geany,当我保存文件时,它会写入临时文件首先,然后将其移至dest,我不知道为什么,但是有时重新编译监视丢失了,并且直到我重新启动babel watch时再也没有触发过

这是链接: https://github.com/di-ninja/babel-watch-extra

答案 5 :(得分:0)

我可以通过添加--watch来获得它。

"scripts": {
    "build": "babel server.js --watch -d dist",
    "start": "npm run build && node dist/server.js"
  },

查看文档:{​​{3}}