【问题标题】:gulp-mocha how to pass the compilers flag?gulp-mocha 如何传​​递编译器标志?
【发布时间】:2015-03-04 15:56:50
【问题描述】:

我正在尝试使用gulp-mocha module,但找不到传递编译器标志的好方法。有没有办法将它包含在我的 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());
});

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

【问题讨论】:

    标签: javascript gulp mocha.js


    【解决方案1】:
    var mocha = require('gulp-mocha');
    var babel = require('babel/register');
    
    gulp.task('mocha', function() {
        return gulp.src(['test/**/*.js'])
            .pipe(mocha({
                compilers: {
                    js: babel
                }
            }));
    });
    

    【讨论】:

    • 请改进您的答案。说明您如何解决此问题以及用户做错了什么。
    • 嗨@lin,gulp-mocha 只是包装mocha,我们可以将编译器作为参数传递。我们使用 babel 将 es6 转换为 es5 作为 gulp 任务中的编译器。
    • 不管答案是否清晰,它确实解决了我让 babel 编译我的 mocha 测试的问题。谢谢胡安!
    • require(babel/register) 在 gulp 文件中不是一个干净的解决方案,因为它加载了来自文档 will pollute the global scope and introduce conflicts cf babeljs.io/docs/usage/require 的 babel 钩子。如果您使用此解决方案,则应仅用于测试(但仍会导致问题...)
    • 如果你使用的是 babel 6,新的方式是requre('babel-core/register')。小心require('babel/register') 将不再起作用。更多:github.com/gulpjs/gulp/issues/1359
    【解决方案2】:

    最佳答案依赖于使用 require 钩子。这仅在当前进程中有效,如果您在单独的进程中运行 Mocha 测试则无效,例如 gulp-spawn-mocha

    这是您将编译器传递到 mocha 模块的方式:

        return mocha({
            compilers: [
                'js:babel-core/register',
            ]
        });
    

    Mocha 将遍历compilers 属性的元素并在: 上拆分。它将前面的字符串视为要遵循的扩展,并将其后面的所有内容注入require() 语句。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          【解决方案5】:

          适合现在尝试的人

          gulp.task('test-mocha', function() {
              return gulp.src(['tests/acceptance/*.js'], {read: false})
                  .pipe(
                      mocha({
                          compilers: 'js:babel-core/register',
                          reporter: 'landing'
                      })
                  )
                  .on('error', gutil.log);
          });
          

          在 gulp 文件 (gulpfile.js) 之上

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

          运行你的测试,它应该可以工作

          gulp test-mocha
          

          【讨论】:

            【解决方案6】:

            Justin Maat,您无需修改​​您的 gulpfile.js。在CLI使用gulp时,只需要使用--require即可:

            ### before
            gulp test
            
            ### after
            gulp --require babel/register test
            

            你注意到区别了吗?为了节省您的几次击键次数,请将其添加到您的 .bashrc.zshrc

            alias gulp='gulp --require babel/register'
            

            下次你可以照常使用gulp

            gulp test
            

            【讨论】:

              猜你喜欢
              • 2013-12-01
              • 1970-01-01
              • 1970-01-01
              • 2012-10-12
              • 1970-01-01
              • 2019-04-14
              • 1970-01-01
              • 1970-01-01
              • 2011-10-20
              相关资源
              最近更新 更多