2013-02-08 9 views
9

私は小規模なノードプロジェクトに取り組んでいます。私はcoffeescriptを使用し、クライアント側のコードは少なくしています。私はgruntを使用して自分の開発環境をセットアップしようとしています。私も作男-contribのウォッチプラグインを使用して、「観る」タスクを実行したいgruntで2つの非同期タスクを実行

start = require './start' #just a function to start express.js application 
grunt.registerTask 'server', 'Starting server', -> 
    grunt.log.write 'Preparing server to start' 
    done = do @async 
    start (err) -> 
     grunt.log.write "server running at localhost:4000" 

grunt.initConfig 
    watch: 
     coffee: 
      files: ['public/coffee/**/*.coffee'] 
      tasks: ['coffee'] 
     jade: 
      files: ['public/jade/**/*.jade'] 
      tasks: ['jade'] 
     less: 
      files: ['public/less/**/*.less'] 
      tasks: ['less'] 

質問です:どのように私はこのようなサーバーを実行するためのカスタムイサキタスクを実装しましたこの2つのタスク(時計とサーバー)を同時に実行させるには?サーバーを起動して実行したいし、クライアント側のコードが変更されるたびにリロードする必要はありません。事前に感謝します

答えて

6

あなたの監視タスクに接頭辞を付け、サーバタスク内のdone = do @asyncを取り除きます。

tasks: ['server', 'coffee']

あなたは「ランニング・ロング」かではないとサーバータスクのためのあなたの面倒な設定でオプションを指定します。その後、(時計タスクなしで)長時間実行する必要がある場合にのみ、@asyncに電話することができます。

+1

をしたがって、制御タスクを監視タスクに戻すことは決してありません。 – Griffin

+0

はい、終了します。私の答えで説明しているように、タスクを終了させるasync()呼び出しを削除してからオプションに基づいて条件付きでそれを追加します。 – tbranyen

+3

私は混乱しています。彼はサーバーを常に長時間走らせたいと考えており、長時間走ってほしいと望んでいます。それはあなたがここで達成していることですか? does notはそれのように見える –

0

私はこの同じ問題を抱えていました。これは、gruntタスクからwatchとconnectの両方のサーバーを起動できないということでした。この問題を解決するために

、私はgrunt connect:preview &の最後にアンパサンド(&)はバックグラウンドプロセスとしてサーバを起動するものである

私Gruntfileに作男-EXECを使用してバックグラウンド・プロセスとしてサーバーを開始しました。

,exec: { 
    start_server: { 
    command: 'grunt connect:preview &' 
    } 
} 

そして、これを行うには良い方法があるように持っているこの

grunt.registerTask('preview', ['clean:preview', 'template', 'exec', 'watch' ]); 

のような単調なタスクを登録し、これまでのところ、それは私が考える可能性が一番です。

+0

私はgrunt-execの代わりにgrunt-shellを使用していて、 '&'は効果がないようです。 –

7

あなたはこの2つのパッケージのいずれかの使用して、同時に2つの以上のタスクを実行することができます。サーバーのタスクはないので、これは動作しません

  1. grunt-parallel
  2. grunt-concurrent
関連する問題