compilers deprecation

David Dias edited this page Sep 4, 2018 · 9 revisions

If you're here, you probably hit the deprecation notice. Sorry about that!

Will it break?

This is a soft deprecation, which means you get nagged about it, but it won't break (yet).

Make it go away

To suppress this warning, execute mocha with the --no-deprecation flag (though you won't get notice of any other deprecations you may encounter either).

... but why?

--compilers is redundant; we've yet to encounter a real-world situation in which the solution couldn't be expressed using --require.

What should I use instead then

Ensure that you have the coffeescript package installed as a dev dependency:

npm install coffeescript --save-dev

Then update your package.json with the relevant require statement.

  • CoffeeScript: --compilers coffee:coffee-script/register becomes --require coffeescript/register
  • Babel 6: --compilers js:babel-core/register becomes --require babel-core/register
  • Babel 7: --require babel-core/register used if you are using Babel v6 becomes --require @babel/register with Babel v7.
  • TypeScript: --compilers ts:ts-node/register becomes --require ts-node/register
  • (feel free to add more examples!)

Mocha, by default, loads only .js when given a directory (and the default directory is test). Therefore, to use a different file extension (such as .coffee or .ts), you will need to supply a glob instead of simply a directory. If this was how you ran Mocha pre-v4:

$ mocha --compilers coffee:coffee-script/register --recursive ./test

Then this is how you'd accomplish the same thing (** roughly means "recursive") in v4:

$ mocha --require coffee-script/register "test/**/*.js"

When you wrap a glob in quotes, file discovery is handed to the glob package. It's recommended to wrap in double-quotes, because the result should be the same regardless of your shell or environment (Windows/Linux/macOS, etc.).

glob is powerful. For instance, if your test dir has tests written in both JS and CoffeeScript, you could do this:

$ mocha --require coffee-script/register "test/**/*.{js,coffee}"

How do I use this with --watch?

When using --watch, you will also need to specify the extension(s) to watch via --watch-extensions, e.g.:

$ mocha --require coffee-script/register --watch --watch-extensions js,coffee "test/**/*.{js,coffee}"

This isn't working

Any questions or trouble? Ask for help in our Gitter chat room!

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.