gulp-mocha如何通过编译器标志?

Jus*_*aat 9 javascript mocha.js gulp

我正在尝试使用gulp-mocha模块,但无法找出传递编译器标志的好方法.有没有办法在我的gulp任务中包含这个?也许在某个单独的管道中?

从命令行运行mocha的示例(工作正常)
mocha --compilers .:my_compiler.js test/**/*.js

使用gulp-mocha的例子(但我在哪里可以指定编译器)?

gulp.task('test', function () {
    gulp.src(["test/**/*.js"], {
        read: false
    })
        .pipe(mocha({
            reporter: 'spec'
        }))
        .pipe(exit());
});
Run Code Online (Sandbox Code Playgroud)

我没有在gulp-mocha插件下看到编译器选项,所以我想我需要以某种方式通过管道附加文本来添加编译器?

小智 16

var mocha = require('gulp-mocha');
var babel = require('babel/register');

gulp.task('mocha', function() {
    return gulp.src(['test/**/*.js'])
        .pipe(mocha({
            compilers: {
                js: babel
            }
        }));
});
Run Code Online (Sandbox Code Playgroud)

  • 请改善你的答案.解释你如何解决这个问题以及用户做错了什么. (4认同)
  • gulp文件中的“ require(babel / register)”不是一个干净的解决方案,因为它会加载babel钩子,而该钩子会从文档中污染全球范围并引入冲突。请参见https://babeljs.io/docs/usage/要求/。如果使用此解决方案,则仅应将其用于测试(但仍可能导致问题...) (2认同)

小智 9

最佳答案依赖于使用require钩子.这只适用于当前进程,如果你在一个单独的进程中运行Mocha测试,则不会gulp-spawn-mocha.

这是你将编译器传递给mocha模块的方法:

    return mocha({
        compilers: [
            'js:babel-core/register',
        ]
    });
Run Code Online (Sandbox Code Playgroud)

摩卡将循环通过compilers属性的元素并拆分:.它会将之前的字符串视为后面的扩展,并将其后的所有内容都注入require()语句中.


小智 8

require('babel-core/register');在gulpfile的开头使用


Jus*_*aat 2

我刚刚注意到底部状态的文档 -

对于 CoffeeScript 支持,请在 CoffeeScript 1.6- 中添加 require('coffee-script') 或在 CoffeeScript 1.7+ 中添加 require('coffee-script/register')。

我在 gulp 文件的顶部为我自己的编译器添加了一条 require 语句require('./my_compiler');,这似乎有效。