任务 "block" 彼此

Tasks "block" each other

我在 Grunt 中发现了一个奇怪的行为,似乎两个任务互相阻塞(或类似的事情)。任务是:shell (https://github.com/sindresorhus/grunt-shell) and sass (https://github.com/gruntjs/grunt-contrib-sass).

我的(简化的)Gruntfile;

"use strict";

var path        = require('path');

module.exports = function(grunt) {

    require('time-grunt')(grunt);

    require('load-grunt-tasks')(grunt);

    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),

        shell: {
            options: {
                stdout: true,
                stderr: true
            },
            bower: {
                command: path.resolve(process.cwd() + '/node_modules/.bin/bower --allow-root install')
            }
        },

        /* ... other tasks */

        sass: {
            dist: {
                options: {
                    trace: true
                },

                files: {
                    'dist/additional.css': 'assets/stylesheets/additional.scss'
                }
            }
        }
    });

    grunt.registerTask('default', [
        'shell',
        'sass',
    ]);

}

当我开始 grunt 时,我的 shell 任务已完成,但在 shell 任务中 "stops" 发出咕噜声:

Running "shell:bower" (shell) task

Running "sass:dist" (sass) task

### ctrl + c ###

Execution Time (2015-04-06 10:56:14 UTC)
loading tasks         8.9s  █ 1%
shell:bower          18.6s  ██ 2%
sass:dist        13m 25.2s  ██████████████████████████████████████████████ 97%
Total 13m 52.7s

当我分别启动这些任务时(分别使用 grunt shell grunt sass)一切正常。

有什么想法吗?谢谢!

grunt-shell 切换为 fork grunt-shell-spawn 并同步尝试 运行 任务。

shell: {
  options: {
    stdout: true,
    stderr: true,
    async: false
  },
  bower: {
    command: path.resolve(process.cwd() + '/node_modules/.bin/bower --allow-root install')
  }
}