2016-08-01 7 views
0

私は、いくつかのネイティブライブラリを含む大きなnode.jsプロジェクトを開発中です。
JavaScriptでこれらのライブラリを使用するには、node-gypを使用してノードアドオン(.node)にコンパイルしています。node-gyp:すべてのサブディレクトリでbinding.gypを実行

ルートディレクトリからnode-gypを1回実行して、使用可能なすべてのbinding.gypを(すべてのサブディレクトリ内で)コンパイルしたいとします。

これを行う方法はありますか?

答えて

1

GYPでは、ターゲットの依存関係のリストを設定できます。あなたは、トップレベルbindings.gyptype: noneのターゲットを作成し、サブディレクトリからそこに依存関係を一覧表示することができます:

{ 
    'targets': [ 
     { 
      'target_name': 'build_all', 
      'type': 'none', 
      'dependencies': ['subdir1/bindings.gyp:*', 'subdir/subdir2/bindings.gyp:*'], 
      # or generate dependencies list with a command expansion 
      'dependencies': ['<[email protected](find -mindepth 2 -name binding.gyp | sed -e s/$/:*/)'], 
     } 
    ] 
} 

これは、すべての依存関係をコンパイルし、ルートにbuild/ディレクトリに入れます。それに対応するディレクトリに、各アドオンを置くための
、アドオンのbinding.gyppostbuildターゲットを追加します。

{ 
    "targets": [ 
    { 
     "target_name": "my-target", 
     "sources": [ "example.cpp" ]  
    },  
    { 
     "target_name": "action_after_build", 
     "type": "none", 
     "dependencies": [ "my-target" ], 
     "copies": [ 
     { 
      "files": [ "<(PRODUCT_DIR)/my-target.node" ], 
      "destination": "." 
     } 
     ] 
    } 
    ] 
} 
+0

この方法で私は新しいネイティブモジュールを追加するたびに、私はこのbindings.gypインデックスを更新する必要があります。 – meltedspark

+0

GYPはコマンドを拡張することもできるので、両方の答えからアプローチを組み合わせることができます。しかし、新しいネイティブモジュールを追加した後、 'node-gyp rebuild'を使ってビルドファイルを再生成する必要があります。 – pmed

+0

私は 'node-gyp rebuild'をとにかく実行しようとしています(実際私の解決策ではそれを見ることができます)。しかし、私はあなたの意見を持っているかどうかはわかりません... GYPが何を意味するのかは、コマンドを拡張することもできますか? – meltedspark

1

ちょうどnode-gypでこれを行うオプションが見つかりませんでしたが、可能な解決策の1つがスクリプトでこれを実行しています。

"scripts": { 
    "install": "find ./app/* -name binding.gyp -execdir node-gyp rebuild ;" 
} 

これは、ルートフォルダにnpm installを実行している場合、すべてのネイティブアドオンをコンパイルします:ルートフォルダにpackage.jsonに以下を追加するたとえば
、。

関連する問題