2016-08-01 2 views
0

Я разрабатываю большой проект node.js, который также включает в себя несколько родных библиотек.
Чтобы использовать эти библиотеки в JavaScript, я компилирую их в аддоны узлов (.node), используя node-gyp.node-gyp: run binding.gyp во всех подкаталогах

Я хотел бы запустить node-gyp один раз из корневого каталога, чтобы скомпилировать все доступные binding.gyp (во всех подкаталогах).

Есть ли способ сделать это?

ответ

1

GYP позволяет установить список зависимостей для цели. Вы можете создать цель type: none в верхнем уровне bindings.gyp и список там зависимости от подкаталогов:

{ 
    '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/ каталог в корневом каталоге.
Для ввода каждого аддона в соответствующем каталоге, добавьте postbuild цели внутри аддона binding.gyp:

{ 
    "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, но одно из возможных решений делает это в скрипте.
Например, добавив следующее в package.json в корневой папке:

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

Это заставит все родные аддоны для компиляции при запуске npm install в корневой папке.