我正在使用 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”
为什么它要运行和重新加载这么多次?
最佳答案
我发现 nodemon
、babel
和其他观察者类型程序的组合通常会产生奇怪的交互。这种“双跑”结果很常见。它们在设置后效果很好,就这样,但可能很脆弱。
也就是说,我不明白您对命令行参数的选择。我不会说它们是错误的,但它们与我安装的 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/