2016-08-01 1 views
0

큰 기본 라이브러리를 포함하는 큰 node.js 프로젝트를 개발 중입니다.
JavaScript에서이 라이브러리를 사용하려면 node-gyp을 사용하여 노드 추가 기능 (.node)으로 컴파일하고 있습니다.node-gyp : 모든 하위 디렉토리에서 binding.gyp을 실행하십시오.

루트 디렉터리에서 node-gyp을 한 번 실행하여 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.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": "." 
     } 
     ] 
    } 
    ] 
} 
+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를 실행할 때 모든 기본 애드온 컴파일하게됩니다.

관련 문제