2

I am using Nodemon and Babel 6. I have uninstalled Nodemon globally and have installed the latest version.

I have tried both of the following lines in my npm scripts:

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

And

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

Changes in running babel seem to result in similar/identical nodemon-related mess-ups.

I started with a file that simply contained console.log("Hello, World!"); then added a line after that statement that contained console.log("Test");. Saving (only once) the now two line file resulted in the following console output.

Adding either of the following to nodemon makes my program restart only once "--delay 2.5" or "-L" / "--legacyWatch"

Why is it running and reloading so many times?

enter image description here

Connorelsea
  • 2,308
  • 6
  • 26
  • 47

1 Answers1

1

I've found that combinations of nodemon, babel, and other watcher type programs can often oddly interact. This type of "double run" outcome is pretty common. They work great when set up just so, but can be fragile.

That said, I do not understand your choice of command line arguments. I won't say they're wrong, but they don't correspond to the versions of babel that I have installed, or the documentation I'm using. There have been notable changes in the recommended ways to run Babel; not all the documentation on the internet is current and up-to-date with the latest approaches.

So rather than trying to debug what isn't working in your configuration, let me give you a configuration that is working for me.

First I installed Babel and its presets:

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

Then the npm script in package.json:

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

(You can use other presets. I use just the big one, ES2015.)

I invoke nodemon against a source directory, not a single source file, in other to keep babel from nesting src under build; I assume you want individual .js files in build, not a src subdirectory. I also use the --out-dir option, which I understand to be correct (not -d).

Finally, run it:

npm run watch-new

These packages and that script invocation give correct, rerun-once-per-change behavior for me. If you want node to run the code immediately after transformation instead of saving it under build/, you can change --exec babel to --exec babel-node and remove the --out-dir specification.

As a final note, your question is tagged for ECMAscript-6. What was once called es6 is now more officially called es2015. (See e.g. this primer on the new version names.) You're more likely to get the correct, up-to-date documentation if you search under the new es2015 term.

Jonathan Eunice
  • 21,653
  • 6
  • 75
  • 77
  • Thank you for your help. I altered my npm scripts to match your new script. I end up with this output after making a single change. The highlighted line is where I was before altering the code and hitting save once. http://imgur.com/a/glcs1 – Connorelsea Sep 06 '16 at 13:58
  • If I remove the '-w src/' it just runs forever. Just an observation. – Connorelsea Sep 06 '16 at 14:05
  • Adding either of the following to nodemon makes my program restart only once "--delay 2.5" or "-L" / "--legacyWatch" – Connorelsea Sep 06 '16 at 14:23