Nodemon + babel 多次重启服务器
Nodemon + babel restart the server multiple times
在我的 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 按预期重新启动一次。
我不知道如何解决这个问题,甚至不知道去哪里寻找答案。我试过 google 它。我一直在 github 访问包的错误部分...(也许我只是不擅长谷歌搜索)。
这是我为同一问题找到的唯一 link,但它似乎没有答案:Nodemon runs multiple times on save when using babel.
我还是尝试了他的脚本 NODE_PATH=src nodemon src --exec babel -w src/ --out-dir build/ --source-maps
但同样的事情发生了,重新启动两次或三次。
就像@Connorelsea 在上面 link 提供的答案的评论部分所说的那样,如果我添加 --delay 2.5
它只会重启一次。
我在想,也许当我在监视的文件中点击保存时,nodemon 立即重新启动并且 babel 开始转译。当 babel 完成后,它会保存一堆 om 转译文件,并且 nodemon 再次重新启动,因为对 src/-folder 进行了更改。但是我不知道如何调试它。
希望大家帮帮我!
**** 编辑 ****
刚找到这个https://github.com/remy/nodemon/issues/508,但他们唯一的解决办法是"upgrade nodemon"。我现在有最新的 1.11.0。
所以,现在几个月后我发现了问题所在。似乎服务器只是在我保存时重新启动一次,而在文件更新后几秒钟后 babel 转换代码时服务器又重新启动了一次。
所以是包 babel-node
给了我这种不想要的行为。它以 nodemon
2 秒 --delay 2
或更长时间的延迟工作。
你应该像这样使用babel-node
作为执行者:
nodemon ./index.js --exec babel-node
所以万一有人像我一样偶然发现这个问题。
虽然延迟有效,但它有效,因为您的构建通常需要不到 2 秒。
这可能会导致它不稳定,或者花费的时间比需要的时间更长。
正确的解决方案是实际上忽略输出目录,或者 nodemon 中的文件。
NODE_PATH=src nodemon --watch src/ --exec babel-node src/app.js --out-file
dist/app.js -- dist/app.js
起初我加载了第一个 babel 构建,然后并行启动了一个启用了 --skip-initial-build
选项和 nodemon 的 babel watch,
但最后,我发现更好的解决方法是制作我自己的 babel watcher,它具有以下优点:
考虑删除和其他事件,保持一切同步
允许我添加@compileDependencies 注释系统(参见https://github.com/kentcdodds/babel-plugin-preval/issues/19)
修复官方@babel/cli watcher 中使用 chokidar 的 awaitWriteFinish
选项导致的 watching 错误(使用我最喜欢的编辑器 geany,当我保存文件时,它先写一个临时文件,然后将它移动到目标,我不知道为什么但有时重新编译监视只是丢失并且在我重新启动 babel watch 之前再也不会触发)
有一个选项可以在 "watch" 模式下使用 Babel 构建文件,让 Nodemon 仅监视 "build" 文件夹并在编译输出发生更改时重新启动应用程序。
{
"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"
}
}
此示例取自 GitHub 上的 GraphQL API Examples
存储库。
我可以通过像这样添加 --watch
来获得它。
"scripts": {
"build": "babel server.js --watch -d dist",
"start": "npm run build && node dist/server.js"
},
在我的 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 按预期重新启动一次。
我不知道如何解决这个问题,甚至不知道去哪里寻找答案。我试过 google 它。我一直在 github 访问包的错误部分...(也许我只是不擅长谷歌搜索)。
这是我为同一问题找到的唯一 link,但它似乎没有答案:Nodemon runs multiple times on save when using babel.
我还是尝试了他的脚本 NODE_PATH=src nodemon src --exec babel -w src/ --out-dir build/ --source-maps
但同样的事情发生了,重新启动两次或三次。
就像@Connorelsea 在上面 link 提供的答案的评论部分所说的那样,如果我添加 --delay 2.5
它只会重启一次。
我在想,也许当我在监视的文件中点击保存时,nodemon 立即重新启动并且 babel 开始转译。当 babel 完成后,它会保存一堆 om 转译文件,并且 nodemon 再次重新启动,因为对 src/-folder 进行了更改。但是我不知道如何调试它。
希望大家帮帮我!
**** 编辑 ****
刚找到这个https://github.com/remy/nodemon/issues/508,但他们唯一的解决办法是"upgrade nodemon"。我现在有最新的 1.11.0。
所以,现在几个月后我发现了问题所在。似乎服务器只是在我保存时重新启动一次,而在文件更新后几秒钟后 babel 转换代码时服务器又重新启动了一次。
所以是包 babel-node
给了我这种不想要的行为。它以 nodemon
2 秒 --delay 2
或更长时间的延迟工作。
你应该像这样使用babel-node
作为执行者:
nodemon ./index.js --exec babel-node
所以万一有人像我一样偶然发现这个问题。
虽然延迟有效,但它有效,因为您的构建通常需要不到 2 秒。
这可能会导致它不稳定,或者花费的时间比需要的时间更长。
正确的解决方案是实际上忽略输出目录,或者 nodemon 中的文件。
NODE_PATH=src nodemon --watch src/ --exec babel-node src/app.js --out-file
dist/app.js -- dist/app.js
起初我加载了第一个 babel 构建,然后并行启动了一个启用了 --skip-initial-build
选项和 nodemon 的 babel watch,
但最后,我发现更好的解决方法是制作我自己的 babel watcher,它具有以下优点:
考虑删除和其他事件,保持一切同步
允许我添加@compileDependencies 注释系统(参见https://github.com/kentcdodds/babel-plugin-preval/issues/19)
修复官方@babel/cli watcher 中使用 chokidar 的
awaitWriteFinish
选项导致的 watching 错误(使用我最喜欢的编辑器 geany,当我保存文件时,它先写一个临时文件,然后将它移动到目标,我不知道为什么但有时重新编译监视只是丢失并且在我重新启动 babel watch 之前再也不会触发)
有一个选项可以在 "watch" 模式下使用 Babel 构建文件,让 Nodemon 仅监视 "build" 文件夹并在编译输出发生更改时重新启动应用程序。
{
"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"
}
}
此示例取自 GitHub 上的 GraphQL API Examples
存储库。
我可以通过像这样添加 --watch
来获得它。
"scripts": {
"build": "babel server.js --watch -d dist",
"start": "npm run build && node dist/server.js"
},