在我的 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。
答案 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"
}
}
此示例摘自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时再也没有触发过
答案 5 :(得分:0)
我可以通过添加--watch
来获得它。
"scripts": {
"build": "babel server.js --watch -d dist",
"start": "npm run build && node dist/server.js"
},
查看文档:{{3}}