私は、いくつかのネイティブライブラリを含む大きなnode.jsプロジェクトを開発中です。
JavaScriptでこれらのライブラリを使用するには、node-gypを使用してノードアドオン(.node
)にコンパイルしています。node-gyp:すべてのサブディレクトリでbinding.gypを実行
ルートディレクトリからnode-gypを1回実行して、使用可能なすべてのbinding.gyp
を(すべてのサブディレクトリ内で)コンパイルしたいとします。
これを行う方法はありますか?
私は、いくつかのネイティブライブラリを含む大きなnode.jsプロジェクトを開発中です。
JavaScriptでこれらのライブラリを使用するには、node-gypを使用してノードアドオン(.node
)にコンパイルしています。node-gyp:すべてのサブディレクトリでbinding.gypを実行
ルートディレクトリからnode-gypを1回実行して、使用可能なすべてのbinding.gyp
を(すべてのサブディレクトリ内で)コンパイルしたいとします。
これを行う方法はありますか?
GYPでは、ターゲットの依存関係のリストを設定できます。あなたは、トップレベルbindings.gyp
にtype: 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.gyp
内postbuild
ターゲットを追加します。
{
"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": "."
}
]
}
]
}
ちょうどnode-gyp
でこれを行うオプションが見つかりませんでしたが、可能な解決策の1つがスクリプトでこれを実行しています。
"scripts": {
"install": "find ./app/* -name binding.gyp -execdir node-gyp rebuild ;"
}
これは、ルートフォルダにnpm install
を実行している場合、すべてのネイティブアドオンをコンパイルします:ルートフォルダにpackage.json
に以下を追加するたとえば
、。
この方法で私は新しいネイティブモジュールを追加するたびに、私はこのbindings.gypインデックスを更新する必要があります。 – meltedspark
GYPはコマンドを拡張することもできるので、両方の答えからアプローチを組み合わせることができます。しかし、新しいネイティブモジュールを追加した後、 'node-gyp rebuild'を使ってビルドファイルを再生成する必要があります。 – pmed
私は 'node-gyp rebuild'をとにかく実行しようとしています(実際私の解決策ではそれを見ることができます)。しかし、私はあなたの意見を持っているかどうかはわかりません... GYPが何を意味するのかは、コマンドを拡張することもできますか? – meltedspark