一旦grunt任务完成,如何打印文本?

Pav*_*ský 8 javascript node.js gruntjs

一旦Grunt任务完成,我想打印出一些信息.请参阅下面的Grunt片段.

有没有办法实现这个目标?我注意到它grunt.task.run()不支持回调.这会导致在覆盖报告输出之前打印出我的消息.

grunt.registerTask('coverage', 'Runs all unit tests available via Mocha and generates code coverage report', function() {
    grunt.task.run('env:unitTest', 'mochaTest');

    grunt.log.writeln('Code coverage report was generated into "build/coverage.html"');
});
Run Code Online (Sandbox Code Playgroud)

我还想避免"hacks",比如创建一个grunt任务,只是为了打印信息并将其添加到grunt.task.run()任务链中.

Kyl*_*ung 18

创建一个在完成所有操作后运行的任务,然后将其添加到任务链:

grunt.registerTask('alldone', function() {
  grunt.log.writeln('Code coverage report was generated into "build/coverage.html"');
});
grunt.registerTask('default', ['env:unitTest', 'mochaTest', 'alldone']);
Run Code Online (Sandbox Code Playgroud)

  • Grunt是一个javascript任务运行器,因此几乎每个关于如何在Grunt中执行某些操作的问题的最佳答案是:使用任务. (2认同)

Jot*_*aBe 4

有一种更好的方法可以做到这一点,无需创建额外的任务,也无需修改任何其他内容。

Grunt 是一个节点进程,因此您可以:

  • 使用流程stdout写出你需要的内容
  • 订阅流程exit事件以在任务完成执行时执行此操作

这是一个简单的示例,它打印任务完成执行的时间:

module.exports = function (grunt) {
    // Creates a write function bound to process.stdout:
    var write = process.stdout.write.bind(process.stdout);

    // Subscribes to the process exit event...
    process.on("exit", function () {
        // ... to write the information in the process stdout
        write('\nFinished at ' + new Date().toLocaleTimeString()+ '\n');
    });

    // From here, your usual gruntfile configuration, without changes
    grunt.initConfig({
Run Code Online (Sandbox Code Playgroud)

当您运行任何任务时,您会在底部看到一条消息,如下所示:

18:26:45 结束