10

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

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

当我击中npm run dev一切正常时,babel 正在按应有的方式转换所有内容,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 中保存文件时,nodemon 将重新启动服务器。但这是我的问题,它重新启动 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 上访问包的错误部分......(也许我只是在谷歌搜索上很烂)。
这是我为同一问题找到的唯一链接,但似乎没有答案:Nodemon 在使用 babel 时在保存时运行多次
无论如何我尝试了他的脚本,NODE_PATH=src nodemon src --exec babel -w src/ --out-dir build/ --source-maps但同样的事情发生了,重新启动两次或三次。

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

我在想也许当我在一个监视的文件中点击保存时,nodemon 会立即重新启动并且 babel 开始编译。当 babel 完成后,它会保存一堆 om 转译文件,并且 nodemon 再次重新启动,因为对 src/-文件夹进行了更改。但我不知道如何调试它。

希望你们能帮助我!

**** 编辑 ****

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

4

6 回答 6

14

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

于 2017-03-06T09:21:50.523 回答
6

您应该babel-node像这样用作执行者:

nodemon ./index.js --exec babel-node
于 2017-05-21T07:03:26.143 回答
5

所以万一有人像我一样偶然发现了这个。

虽然延迟有效,但它有效,因为您的构建通常需要不到 2 秒。

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

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

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

于 2018-06-29T16:29:34.650 回答
2

起初我正在加载第一个 babel 构建,然后并行启动一个--skip-initial-build启用选项和 nodemon 的 babel watch,

但最后,我发现更好的解决方法是制作我自己的 babel watcher,它具有以下优势:

  • 考虑到删除和其他事件,保持一切同步

  • 允许我添加 @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

于 2018-11-28T00:17:02.340 回答
2

有一个选项可以在“监视”模式下使用 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"
  }
}

在此处输入图像描述

此示例取自GraphQL API ExamplesGitHub 上的存储库。

于 2019-09-17T18:40:50.317 回答
1

我能够通过这样添加来获得它--watch

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

查看文档:https ://babeljs.io/docs/en/babel-cli

于 2019-09-24T04:23:23.280 回答