it-swarm.com.de

grunt watch task blockiert die Kommandozeile

Ich bin neu im Grunzen, lerne noch und bin auf ein sehr seltsames Problem gestoßen. Wenn ich eine "watch"-Task ausführe, wird meine Befehlszeile blockiert, sodass ich im Grunde nichts tun kann. Denken Sie daran, dass die Aufgabe mit Erfolg abgeschlossen wird. Dies ist meine Befehlszeilenausgabe:

C:\server\css-test>grunt w
Running "watch" task
Waiting...OK
>> File "compass-examples-master\02\sass\screen.scss" changed.

Running "compass" (compass) task
unchanged compass-examples-master/02/sass/ie.scss
unchanged compass-examples-master/02/sass/print.scss
overwrite compass-examples-master/02/stylesheets/new/sass/screen.css

Running "watch" task

Completed in 1.496s at Fri Mar 22 2013 19:31:37 GMT+0100 (Central Europe Standard Time) - Waiting...

Wie Sie sehen, führe ich nur die Aufgabe "compass" aus, die erfolgreich abgeschlossen wird.

Die Einfügemarke blinkt nach dem Textteil Waiting... weiter, aber die Tastatureingabe funktioniert nicht.

Meine Grunzkonfiguration

module.exports = function (grunt)
{

    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        compass: {
            dist: {
                options: {
                    sassDir: 'compass-examples-master/02',
                    cssDir: 'compass-examples-master/02/stylesheets/new',
                    imagesDir: 'compas-examples-master/02/images',
                    boring: false,
                    outputStyle: 'nested',
                    require: 'sass-media_query_combiner'
                }
            }
        },
        watch: {
            files: 'compass-examples-master/02/sass/*',
            tasks: ['c']
        }
    });

    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.loadNpmTasks('grunt-contrib-compass');


    grunt.registerTask('c', 'compass');
    grunt.registerTask('w', 'watch');

};
12
Ivan V.

Ich habe grunt watch nicht verwendet, aber ich glaube, das Problem ist, dass es sich um einen kontinuierlich laufenden Prozess handelt und Ihre Befehlszeile standardmäßig jeweils einen Prozess ausführt. Es gibt 3 Lösungen, die Sie verwenden können.

  1. Öffne ein neues Terminal. Sie können mehrere gleichzeitig offen haben, und dies ermöglicht es Ihnen, die zweite als Hauptterminal zu verwenden, während die Grunzuhr die andere belegt.
  2. Verwenden Sie das Symbol & in Ihrem Befehl. Dadurch wird der Vorgang gestartet und die Befehlszeile wird sofort an Sie zurückgegeben, sodass Sie sie für andere Zwecke verwenden können. Sie können sich vorstellen, dass der Befehl im Hintergrund ausgeführt wird. Der Vorgang ist weiterhin mit dem Terminalfenster verbunden. Wenn Sie das Fenster schließen, wird der Vorgang beendet.

    grunzen w &

  3. Verwenden Sie (&) um Ihren Befehl. Dies wird im Hintergrund genauso ausgeführt wie &, der Vorgang wird jedoch nicht abgebrochen, wenn Sie das Terminalfenster schließen.

    (grunzen w &)

21
Nick Mitchinson

Ich finde es einfacher, den Überwachungsprozess einfach zu stoppen, indem ich gleichzeitig Strg und c drücke. Dann kann ich die Kommandozeile benutzen, um Dinge zu erledigen und dann wieder grunzen zu sehen, wenn ich bereit bin, zum Browser zurückzukehren.

5
jojojohn

Für Windows verwenden

start grunt

Dadurch wird ein CMD-Fenster geöffnet, das im Hintergrund "beobachtet" und das git-bash- oder cmd-Fenster, in dem Sie gearbeitet haben, so belässt, wie Sie es verlassen haben.

Mit anderen Worten, dies führt die Aufgabe in einem separaten Cmd-Fenster für Sie aus.

Ich wollte die Leute nur wissen lassen, dass dies gemäß den Kommentaren funktioniert hat.

5

Neben den von @Nick angebotenen Nur-Terminal-Lösungen wäre eine bessere Integration von Node-Lösungen von Vorteil.

Dies war ein WONTFIX von grunt-contib-watch https://github.com/gruntjs/grunt-contrib-watch/issues/340 und grung-bg-Shell https://github.com/rma4ok/grunt-bg-Shell/fragen/14 .

Vorgeschlagene Alternativen waren:

Ich verwende screen, https://www.gnu.org/software/screen/ , damit ich zwischen Terminalfenstern wechseln kann.

0
Ian Jamieson