|
| 1 | +--- |
| 2 | +description: Compilers deprecation notice. |
| 3 | +title: Compilers deprecation |
| 4 | +--- |
| 5 | + |
| 6 | +If you're here, you probably hit the deprecation notice. Sorry about that! |
| 7 | + |
| 8 | +## Will it break? |
| 9 | + |
| 10 | +This is a *soft* deprecation, which means you get nagged about it, but it won't break (yet). |
| 11 | + |
| 12 | +## Make it go away |
| 13 | + |
| 14 | +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). |
| 15 | + |
| 16 | +## ... but why? |
| 17 | + |
| 18 | +`--compilers` is redundant; we've yet to encounter a real-world situation in which the solution couldn't be expressed using `--require`. |
| 19 | + |
| 20 | +## What should I use instead then? |
| 21 | + |
| 22 | +Let's say you want to compile using CoffeeScript. Ensure that you have the coffeescript package installed as a dev dependency: |
| 23 | + |
| 24 | +```npm install coffeescript --save-dev``` |
| 25 | + |
| 26 | +Then update your package.json with the relevant require statement: `--require coffeescript/register`. |
| 27 | + |
| 28 | +Here's a list of popular compilers/transpilers: |
| 29 | + |
| 30 | +- CoffeeScript: `--compilers coffee:coffee-script/register` becomes `--require coffeescript/register` |
| 31 | +- Babel 6: `--compilers js:babel-core/register` becomes `--require babel-core/register` |
| 32 | +- Babel 7: `--require babel-core/register` used if you are using Babel v6 becomes `--require @babel/register` with Babel v7. |
| 33 | +- TypeScript: `--compilers ts:ts-node/register` becomes `--require ts-node/register` |
| 34 | +- LiveScript: `--compilers ls:livescript` becomes `--require livescript` |
| 35 | +- (feel free to add more examples!) |
| 36 | + |
| 37 | +You'll have to handle file extensions as well. Mocha, by default, only loads `.js` files 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: |
| 38 | + |
| 39 | +```bash |
| 40 | +$ mocha --compilers coffee:coffee-script/register --recursive ./test |
| 41 | +``` |
| 42 | + |
| 43 | +Then this is how you'd accomplish the same thing (`**` roughly means "recursive") in v4: |
| 44 | + |
| 45 | +```bash |
| 46 | +$ mocha --require coffeescript/register "test/**/*.js" |
| 47 | +``` |
| 48 | + |
| 49 | +When you wrap a glob in quotes, file discovery is handed to the [glob](https://npm.im/glob) package. |
| 50 | + 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.). |
| 51 | + |
| 52 | +[glob](https://npm.im/glob) is powerful. For instance, if your `test` dir has tests written in *both* JS *and* CoffeeScript, you could do this: |
| 53 | + |
| 54 | +```bash |
| 55 | +$ mocha --require coffeescript/register "test/**/*.{js,coffee}" |
| 56 | +``` |
| 57 | + |
| 58 | +## How do I use this with `--watch`? |
| 59 | + |
| 60 | +When using `--watch`, you will also need to specify the extension(s) to watch via `--watch-extensions`, e.g.: |
| 61 | + |
| 62 | +```js |
| 63 | +$ mocha --require coffeescript/register --watch --watch-extensions js,coffee "test/**/*.{js,coffee}" |
| 64 | +``` |
| 65 | + |
0 commit comments