web-dev-qa-db-ja.com

grunt watchtaskはコマンドラインをブロックします

私はうなり声を上げたばかりで、まだ学んでいるので、非常に奇妙な問題に直面しました。 "watch"タスクを実行すると、コマンドラインがブロックされるため、基本的に何もできません。タスクが成功して完了することを心に留めておいてください。これは私のコマンドライン出力です:

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...

ご覧のとおり、"compass"タスクを実行するだけで、正常に完了します。

Waiting...テキスト部分の後、挿入ポイントが点滅し続けますが、キーボード入力が機能しません。

私のうなり声の構成

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');

};
13
Ivan V.

私はgruntwatchを使用したことがありませんが、問題はそれが継続的に実行されているプロセスであり、デフォルトではコマンドラインが通常一度に1つのプロセスを実行することだと思います。使用できるソリューションは3つあります。

  1. 新しいターミナルを開きます。一度に複数を開くことができます。これにより、うなり声の時計がもう一方を占有している間、2番目をメイン端末として使用できます。
  2. コマンドで&記号を使用します。これにより、プロセスが開始され、すぐにコマンドラインが返され、他の用途に使用できるようになります。これは、コマンドをバックグラウンドで実行していると考えることができます。プロセスはまだターミナルウィンドウに接続されているため、ウィンドウを閉じるとプロセスは終了します。

    うなり声w&

  3. コマンドの前後に(&)を使用します。これは&と同じようにバックグラウンドで実行されますが、ターミナルウィンドウを閉じてもプロセスは強制終了されません。

    (うなり声w&)

21
Nick Mitchinson

Windows用

start grunt

これにより、バックグラウンドで「監視」するCMDウィンドウが表示され、作業していたgit-bashまたはcmdウィンドウがそのままになります。

つまり、これにより、別のcmdウィンドウでタスクが実行されます。

コメントごとにこれが機能したことを人々に知らせたかっただけです。

6

Ctrlキーとcキーを同時に押して、監視プロセスを停止する方が簡単だと思います。次に、コマンドラインを使用して処理を実行し、ブラウザに戻る準備ができたらgruntwatchを再度実行します。

4
jojojohn

@Nickによって提案されたターミナルのみのソリューションに加えて、より適切に統合されたNodeソリューションがあるとよいでしょう。

これには、grunt-contib-watch https://github.com/gruntjs/grunt-contrib-watch/issues/34 およびgrung-bg-Shell https://)からのWONTFIXがありました。 github.com/rma4ok/grunt-bg-Shell/issues/14

提案された代替案は次のとおりです。

私はscreenを使用しています https://www.gnu.org/software/screen/ なので、ターミナルウィンドウを切り替えることができます。

0
Ian Jamieson