使用babel时,Nodemon会在保存时多次运行

时间:2016-09-06 03:36:37

标签: javascript node.js ecmascript-6 babeljs nodemon

我正在使用Nodemon和Babel 6.我已经全局卸载了Nodemon并安装了最新版本。

我在我的npm脚本中尝试了以下两行:

"watch-new": "nodemon src/index.js --exec babel -w src/ -d build/ --source-maps"

console.log("Hello, World!");

正在运行的babel的变化似乎导致类似/相同的与nodemon相关的混乱。

我开始使用一个只包含console.log("Test");的文件,然后在包含int** m = new int*[input];的语句后添加一行。保存(仅一次)现在的两行文件导致以下控制台输出。

将以下任一项添加到nodemon使我的程序只重启一次" - 延迟2.5"或" -L" /" - legacyWatch"

为什么它会这么多次运行和重装?

http://a.example/%66oo-bar

1 个答案:

答案 0 :(得分:0)

我发现nodemonbabel和其他观察者类型程序的组合通常会奇怪地互动。这种"双跑"结果非常普遍。设置就是这样时它们工作得很好,但可能很脆弱。

那就是说,我不明白你选择的命令行参数。我不会说他们错了,但他们不符合我安装的babel版本或我使用的文档。推荐使用Babel的方法有了显着的变化;并非所有互联网上的文档都是最新的,最新的方法。

所以,不要试图调试你的配置中没有的东西,让我给你一个 为我工作的配置。

首先我安装了Babel及其预设:

npm install --save-dev babel-cli babel-preset-es2015

然后是package.json中的npm脚本:

"watch-new": "nodemon src --exec babel --presets es2015 -w src/ --out-dir build/ --source-maps"

(您可以使用其他预设。我只使用较大的预设,ES2015。)

我针对源目录而不是单个源文件调用nodemon,而不是babelsrc下嵌套build;我假设您需要.js中的单个build文件,而不是src子目录。我也使用--out-dir选项,我理解这是正确的(不是-d)。

最后,运行它:

npm run watch-new

这些包和脚本调用为我提供了正确的,每次更改一次的重新运行行为。如果您希望node在转换后立即运行代码而不是将其保存在build/下,则可以将--exec babel更改为--exec babel-node并删除--out-dir规范。

最后一点,你的问题被标记为ECMAscript-6。以前被称为es6的内容现在更正式地称为es2015。 (例如this primer on the new version names。)如果您使用新的es2015字词进行搜索,则您更有可能获得正确的最新文档。