javascript - 使用 babel 时 Nodemon 在保存时运行多次

标签 javascript node.js ecmascript-6 babeljs nodemon

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

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

"watch-new": "nodemon src/index.js --exec babel-node"

还有

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

运行 babel 的变化似乎会导致类似/相同的 nodemon 相关困惑。

我从一个仅包含 console.log("Hello, World!"); 的文件开始,然后在包含 console.log("Test") 的语句后面添加了一行;。保存(仅一次)现在的两行文件会产生以下控制台输出。

将以下任一内容添加到 nodemon 使我的程序仅重新启动一次“--delay 2.5”或“-L”/“--legacyWatch”

为什么它要运行和重新加载这么多次?

enter image description here

最佳答案

我发现 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,以防止babel下嵌套src构建;我假设您需要 build 中的各个 .js 文件,而不是 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 术语下进行搜索,您更有可能获得正确的最新文档。

关于javascript - 使用 babel 时 Nodemon 在保存时运行多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39340268/

相关文章:

javascript - 随机 LI 选择器

http - 使用 gzip/deflate 压缩的简单 HTTP 请求

android - 在android中使用socket io进行身份验证以用于聊天应用程序

javascript - Set.constructor`alert\x28document.domain\x2 9```含义

javascript - 使用 express 获取、存储和使用 JSON 变量

javascript - 展平数组并查找相应值并写入新数组

javascript - 鼠标事件未在 react 中触发

javascript - 在 MVC .cshtml 页面中使用 JavaScript if else

javascript - 将 google-app-script 中的所有拉丁字母替换为数字?

javascript - node.js:抑制 require() 将解析错误回显到 stderr