2013-12-17 4 views
37

여러 환경에서 작동하는 node.js 용 스크립트를 만들려고합니다. 특히 나를 위해, 나는 OS X와 ​​우분투 사이에서 앞뒤로 전환하고있다. 전자의 경우 노드는 node으로 설치되지만 후자의 경우 nodejs으로 설치됩니다. 내 스크립트의 상단에, 내가 가질 수Node.js 스크립트에 적합한 hashbang

#!/usr/bin/env node 

또는

#!/usr/bin/env nodejs 
노드가 아닌 설치되어 차라리 스크립트가 한 중 환경에 대한 실행 파일로 실행 한 것

이 하나가 또는 다른 사람은 명령을 지정해야합니다 (./script-name.jsnode script-name.js).

백업 hashbang을 지정하는 방법이나 node.js와 호환되는 백업 hashbang을 지정하는 방법이 있습니까? 스크립트가 노드의 개발자가 사용하기위한 것입니다 경우

+0

스크립트를 호출하기위한 래퍼 셸 스크립트를 만들면 노드가 어디에 있고 무엇이 호출되는지 알 수 있습니다. – Doon

+3

유닉스 사이트에서이 답변에 대한 많은 제안 - http://unix.stackexchange.com/questions/65235/universal-node-js-shebang – sargant

+0

나는'#!/usr/bin '에서 변경 한 nodejs 스크립트를 가지고있다./node'를 우분투 12.04에서 12.10으로 업그레이드했을 때'#!/usr/bin/nodejs'로 변경했습니다. 그리고 그것은 둘 다 검사하는 래퍼에서 호출됩니다. '#!/usr/bin/env' 해킹에 대한 논의는 [이 질문] (http://unix.stackexchange.com/q/29608/10454)과 [내 대답] (http : // unix. stackexchange.com/questions/29608/why-is-it-better-to-use-usr-bin-env-name-instead-of-path-to-name-as-my/29620#29620). –

답변

63

, 당신은 절대적으로 단지

#!/usr/bin/env node 

하지 만 노드가 nodejs로 설치 한 사람들과의 호환성을 위해 노력하고 귀찮게 사용해야합니다.

이론적 근거 :

  • 그것은 멋진 애들이하고있는, 당신은 너무 그것을하지 않으면, 당신은 멋진하지 않은거야. jshint, karma, bower 및 심지어 npm과 같은 주요 노드 프로젝트는 실행 스크립트의 일부로 간단하게 #!/usr/bin/env node을 사용합니다.
  • 멋진 애들이하고 있기 때문에, 우분투의 Node와 함께 일하는 사람은 nodejs에 심볼릭 링크로 /usr/bin/node을 설정했습니다. Stack overflow 및 웹 전체에서 여기에 highly-viewed instructions이 있습니다. nodejs-legacy 패키지가있어이 심볼릭 링크를 만드는 것이 전체 목적이었습니다. 노드를 사용하는 사람들은 우분투에서이 문제를 해결하는 방법을 알고 있으며, 은 노드에 작성된 소프트웨어를 거의 사용하고 싶다면해야합니다.
  • 우분투 14.04에는 문제가 더 이상 존재하지 않는 것 같습니다. 방금 노드를 제거하고 apt-get install nodejs을 실행하고 /etc/alternatives/node에 심볼릭 링크로 /usr/bin/node을 생성했습니다. 이 문제로 괴로워하는 사람들은 점점 줄어들고 있습니다. 당신이 노드 문맹 명을 대상으로 않더라도

, 당신은 여전히 ​​당신이 필요하다고 생각하면 아마 설치 설명서를 수동 심볼릭 링크 생성 또는 nodejs-legacy 패키지의 설치를위한 가능한 필요를 추가, #!/usr/bin/env node를 사용할 수 있습니다. nodejs하지만 node 가능한 시도에 누군가가 위의 오두막으로 프로그램을 실행하는 경우, 그들이 볼 것을 참고 :

는/usr/빈/ENV : 노드 : 그런 파일이나 디렉토리

Googling that은 첫 번째 결과에서 수정 사항을 제공하고 첫 번째 페이지에서 여러 번 수정합니다.당신이 진정으로, 필사적으로 사용자가 nodejs는 사용할 수 있지만 node가 (또는 node 실제로 Amateur Packet Radio Node program입니다), 다음 사용할 수있는이 "두 줄의 아닌 시스템에 소프트웨어를 실행할 수 있는지 확인하려면

오두막은 "Unix & Linux Stack Exchange에서 촬영 :

#!/bin/sh 
':' //; exec "$(command -v nodejs || command -v node)" "$0" "[email protected]" 

console.log('Hello world!'); 

하지만 당신은 정말 노드의 세계에서 다른 거의 아무도 없을 때이 작업을 수행해야합니까?

+1

'nodejs' 실행 파일에 대한 지원이 선호된다면'#!/bin/sh'와'/ bin/false ||와 함께 사용하는 것이 더 낫습니다. exec "$ (명령 -v nodejs || 명령 -v 노드)" "$ 0"'. – lennartcl