2011-08-31 2 views
2

npm없이 서버에 배포 할 노드 응용 프로그램을 패키징하고 있습니다. 내가 알아 낸 것 같아요 - npm을 사용하여 package.json 파일에 따라 로컬 node_modules 폴더에 모든 종속성을 설치했습니다.npm이 Contextify Release를 빌드하지 않습니다 - 노드 경로를 찾을 수 없습니까?

모두 제대로 작동하는 것으로 보이지만 서버에서 노드 파일을 실행하려고하면 Cannot find module '../build/Release/contextify'이라는 문구가 나타납니다.

node_modules/.npm/contextify/0.0.4/package/lib/contextify.js에서 해당 파일을 묻기 때문에 node_modules/.npm/contextify/0.0.4/package/build에는 Release이라는 디렉토리가 없습니다. 난 그냥 릴리스를 내장하지 않은 그 NPM을 가정, 그래서 나는 다시 dev에 기계로 전환하고, npm install가 실행 - 그것은 불평하지 않았고, contextify 구축 출연 :

$ sudo npm install 

> [email protected] preinstall /path/to/node/stuff/node_modules/contextify 
> node-waf clean || true; node-waf configure build 

'clean' finished successfully (0.014s) 
Setting srcdir to      : /path/to/node/stuff/node_modules/.npm/contextify/0.0.4/package 
Setting blddir to      : /path/to/node/stuff/node_modules/.npm/contextify/0.0.4/package/build 
Checking for program g++ or c++   : /usr/bin/g++ 
Checking for program cpp     : /usr/bin/cpp 
Checking for program ar     : /usr/bin/ar 
Checking for program ranlib    : /usr/bin/ranlib 
Checking for g++       : ok 
Checking for node path     : not found 
Checking for node prefix     : ok /usr/local/Cellar/node/0.4.5 
'configure' finished successfully (0.043s) 
Waf: Entering directory `/path/to/node/stuff/node_modules/.npm/contextify/0.0.4/package/build' 
[1/2] cxx: src/contextify.cc -> build/default/src/contextify_1.o 
[2/2] cxx_link: build/default/src/contextify_1.o -> build/default/contextify.node 
Waf: Leaving directory `/path/to/node/stuff/node_modules/.npm/contextify/0.0.4/package/build' 
'build' finished successfully (0.370s) 

불행하게도 package/build 디렉토리를 여전히 Release 폴더가 없습니다.

내 노드 경로가 설정되어 있지 않기 때문에 contextify가 빌드에 실패하는 경우입니다 (export NODE_PATH을 시도했지만 도움이되지 않은 것 같음). 또는 다른 이유로 문맥 화가 그 건물을 짓지 않는 것처럼 보입니다.

어쩌면 나는 더 큰 것을 놓치고 있습니까? 나도 같은 문제가 발생하고

답변

1

나는 *. nodejs의 로컬 버전 v.0.4 생각하고 nodejs의 서버 버전은 V0.5 광고입니다. *

당신이 dev에와 생산 nodejs의 동일한 버전을 사용하십시오. v0.4.로 전환하면 문제가 해결 될 것입니다. node-waf 'build'설정이 5. * 버전의 어딘가에서 'default'에서 'Release'로 바뀌 었습니다. 그러나

한 경고 :

일부 NPM 패키지 (컴파일 된) 바이너리를 사용하고 있습니다. I.M.O, npm없이 '다른'플랫폼에 배포하기 위해 하나의 패키지에 '컴파일 된'node_module을 번들해서는 안됩니다. 문제가 생기기까지는 시간 문제입니다. (위와 같이)

+0

이 [노드 커밋] (https://github.com/joyent/node/commit/879eb16280688436d791ebb79b05198ac4e4b038#diff-3)이 문제의 원인입니다. – jorrit

3

이 오류의 수정은 waf의 "build"디렉토리를 제거한 다음 재구성하는 것입니다. 여하튼 waf는 누락 된 NODE_PATH로 인해 나쁜 설정 결과를 캐싱합니다. 따라서 기억하고 설정하더라도 실제로 오류를보고하지 않는 구성에도 불구하고 컴파일되지 않습니다. 바보!

export NODE_PATH="/usr/local/lib/node_modules/" 
rm -fr build 
node-waf configure 
node-waf build 
관련 문제