【Graunt】Grauntの可視化に関する試み

5762 ワード

<!--&菗13;
1,h 2,h 3,h 4,h 5,h 6,p,blockquot{magin:0;padding:0;}body{font-famimily:“Helvetica Neue”,Helvetica,“Hragino Sans GB”,Aril,sas-serif;font-size pzx 13 pze e e e e e e ppppphttttttttxxxxxxtttttpppppppppppppppppppppppppppze e e 13 ppppze e e e e e e e e 13 ppppppppppppppd 6;a:hover{color=ble 0050 a 3;text-decoration:none}a[border:none]p{magin-bottom:9 px;}h 1,h 2,h 3,h 4,h 5,h 6{カラー6}h 6{芮404040;line-height:36 px;h1{magin-bottm:18 px;font-size:30 px;h2{font-size:24 px}h 2}h 2{font- sizze:24 px;3 fozzzzzzzzzzzzzzzzzze:16 fottttttttttttttttttttttttttttttttttttttttttttttf:{16 fofox 13 px;}hr{margin:0 19 px;border:0;border-bottom:1 px sold咻咻blockquot;{padding:13 px 13 px 21 px 15 px;margin-bottom:18 px;font-family:georgia、serif;font-style:italic;C";font-size:40 px;magin-left:-10 px;font-famimimimiy:georgia、serif;カラー:\33801;本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本{background-カラー:(zhi fee 9 cc);(0、0、0、0.75)、padding:1 px 3 px;font-size:12 px;-webkit-border-radius:3 px;−moz-border-radius:3 px;pre{display:block;padding:14 pdlinx:16 ppdlinx:16 pdlinx:16 ppdlinx:18 18 pdlinx:18 pppdlinx:18 pppx;ppx:18 pdlinx:18 ppx;ppppx;pdlinx:16 px;ppdlinx;px:16 pppdlinx;px;pppppdlinx:16 ppx:16 px;9;white-space:pre-wrap;word-wrap:break-word;pre code{background}菗737373;font-size:11 px;padding:0;&啝13;
-->
 
Grauntを使って遭遇した問題?
  • NodeJS
  • をインストールしなければなりません.
  • grunt-cli
  • をインストールしなければなりません.
  • は、複雑なGruntfile.js規則
  • を作成する必要があります.
  • 各項目にnodejsが存在しなければならないgruntモジュール
  • は、gruntを含む各項目を管理するのに不便である
  • .
  • プロジェクトを早く開始できませんでした.
  • 考えをまとめる
  • 直接NodeJSgrunt-cliを含める?
  • UIがあるインタフェースを利用して管理しますか?
  • プログラムでgruntfileのルールを簡略化しますか?
  • すべての項目に必要なgruntモジュールを一緒に含める?
  • 標準的にいくつかの常用機能モジュールを内蔵しますか?
  • ソリューション--nodewebkit
  • nodejsを集めています.NodeJSのインストールを省きます.
  • webkitカーネルを統合し、インタフェース
  • を作成するのに便利です.
  • フロントエンドの開発に適しています.
  • の一回の開発は、三大平台window/mac/linux
  • の互換性があります.
    問題にぶつかる
    一.どうやってNodeJSをGranctを実行させますか?
  • は、NodeJSのspawnを利用してcmdコマンド
    //          
    process.chdir("    ");
    //  grunt
    require("child_process").spawn("grunt");
    を実行するのが最も簡単であるが、NodeJSgrunt-cli
  • に依存する必要がある.
  • は、grunt-cliのモジュールを直接コードに導入し、nodejsを利用して
    var gruntpath = "grunt.js   ";
    var grunt = require(gruntpath);
    grunt.cli();
    を呼び出して直接実行し、grunt file.jsが見つからないことをヒントを与え、gruntフォルダのtask.jsを修正し、約430行ぐらいで
    var old_path = process.cwd();//        
    process.chdir('      ');//       
    var gruntfile = allInit ? null : grunt.option('gruntfile') ||
    grunt.file.findup('Gruntfile.{js,coffee}', {nocase: true});//  gruntfile  
    process.chdir(old_path);//       
        n   ~~~
    (grunt.option('npm') || []).forEach(task.loadNpmTasks);//  npm   
    process.chdir('      ');//       
    をプロジェクトファイル検索gruntfile.jsファイルに切り替え、プログラムディレクトリのnodeモジュールに切り替えて、gruntを実行した後、プログラムが自動的に終了しました.Guntの下のexit.js
    process.exit(0);//       
  • を修正したいです.
    二.どうやってサブプロセスでGrauntを実行しますか?
  • NodeJSのchild upurcess.fork
    var child = require("child_process").fork("child.js");
    child.onmessage = function(data){
      console.log(data);
    }
    child.on("exit",function(exitCode){
      console.log(exitCode);
    });
    --運転後のヒント:unzip the package xx/child.js、インターネット上の各種Googleを利用して、作者の結論を得ます.
    child uprocess.fork is brook en
    --囧、この方法は使えませんでしたか?Googleを続けて分かりました.
    child upprocess.forkはjsファイルを実行できないので、直接実行命令nw を実行します.だから修正して、childフォルダの中にもpackage.jsonファイルを入れて、実行したら、本当に成功しました.
    --そして、大きな問題が残されています.forkの通信インターフェースが使えなくなりました.囧、最後にtcpを使ってプロセス通信を実現するしかありませんでした.
    child uplocess.forkはchildコマンドを実行しますので、包装後はnwコマンドがありません.
  • は、NodeJSのwebworkerを利用して
    npm install node-webworker
    を実行した後、nw
    var Worker  = require("worker.js");
    var workker = new Worker("child.js");
    worker.onmessage = function(data){
        console.log(data);
    }
    worker.postmessage({msg:'hello'});
    を引用して実行したところ、child.jsの中のいかなる情報も親プロセスに伝えられず、worker.jsに関連情報が保存されていることが分かりました.:
    spawn node not foundは、実行する命令が見つからないです.
    変です.worker.impl.bufferを呼んでいませんでしたが、どこで見つけられませんでしたか?worker.jsのソースコードを調べてみます.囧、
    var timeId = setInterval(function(){
        var msg = worker.impl.buffer;
        if(!msg)return false;
        console.log(msg);
        worker.imple.buffer = "";
    },1000);
    囧、もとはspawnのコマンドを実行して子プロセスを実現しました.お父さんを陥れました.
  • HTML 5のwebworker
    child_process.spawn("node xxx.js");
    を使ってテストしたところ、実行に成功し、メッセージも正常に受信されました.しかし、nodewebworkerコードを実行していません.gruntは走れません.
    三.現在利用可能な方案
  • は非子プロセス方式を採用する.
  • 複数のgruntタスクを同時に走れない
  • gruntは終了方法を提供していません.
  • 手動でgruntのwatchタスクと多くの変数値をクリアする必要があります.比較的に面倒です.
  • エラーが発生しました.直接プログラムを終了する可能性があります.
  • 独立して、childコンテンツを実行可能ファイルに包装し、child uplocess.spawnを用いて実行する.
  • は実行可能ファイルを二つ開けなければなりません.二つを合わせて少なくとも80 M
  • もあります.
  • 開発にはforkが必要です.包装にはspawn
  • を使います.
  • NodeJSをインストールし、webworker方式を採用する.
  • コンピュータはNodeJs
  • をインストールしなければなりません.
  • 現在より良い方案
  • 未来のNOdewebkitはサブプロセス方式をサポートしています.比較的に簡単に修正できます.
  • PS:まだ他の子プロセスが発見されていません.他の大神を助けてください.