2014-06-06 6 views
0

npm 패키지를 만들려고합니다.이 패키지는 쉘에서 명령으로 시작할 수 있습니다. 나는 package.jsonnpm 패키지의 이진 파일

{ 
    "name": "myapp", 
    "version": "0.0.6", 
    "dependencies": { 
    "async": "", 
    "watch": "", 
    "node-promise": "", 
    "rmdir": "", 
    "should": "", 
    "websocket": "" 
    }, 
    "bin": "myapp" 
} 

#!/bin/bash 

path=`dirname "$0"` 
file="/myapp.js" 

node $path$file $1 & 

myapp을하지만 오류 얻을 :

module.js:340 
    throw err; 
     ^
Error: Cannot find module '/usr/local/bin/myapp.js' 
    at Function.Module._resolveFilename (module.js:338:15) 
    at Function.Module._load (module.js:280:25) 
    at Function.Module.runMain (module.js:497:10) 
    at startup (node.js:119:16) 
    at node.js:902:3 

문제는 myapp.js 다른 디렉토리에 있는지입니다. 스크립트에서이 디렉토리 이름을 가져 오는 방법은 무엇입니까? 아니면 이것을 할 수있는 더 좋은 방법이 있을까요?

+0

왜 cmdline에 myapp.js'디렉토리 경로'를 주면 안된다. ./scriptname.sh 'directory_path'로 스크립트를 호출하고'node $ path $ file $ 1 '대신'node $ 1/$ {file}'을 사용한다. , 이렇게하면'path = \'dirname "$ 0"\'' – PradyJord

+0

이 필요하지 않을 것입니다.이 파일은 패키지의 일부이기 때문입니다. 그리고이 스크립트를 간단하고 포괄적 인 명령으로 만들고 싶습니다. – ciembor

+0

'$ 0' 심볼릭 링크 경로를 실제 파일 경로로 변환해야합니다. http://stackoverflow.com/questions/4774054/reliable-way-for-a-bash-script-to-get-the-full-path-to-itself를 보셨습니까? – loganfsmyth

답변

8

실제로 myapp.js 파일을 bin에 넣을 수 있습니다.
그래서, package.json 파일의 빈 키를 다음과 같이해야한다 :

#!/usr/bin/env node 

그것은에 시스템을 알려줍니다 myapp.js의 첫 번째 행에서

"bin": { "myapp" : "<relative_path_to_myapp.js>/lib/myapp.js" } 

,이 당면한 라인을 추가해야합니다 node을 사용하여 myapp.js을 실행하십시오.


... 아니면 직접 myapp.js를 호출하지 않으려면, 당신은 당신의 실행 파일로이 같은 스크립트를 만들 수 있습니다

#!/usr/bin/env node 

var myapp = require('<relative_path_to_myapp.js>/myapp.js'); 
myapp.doSth(); 

및 package.json에 :

"bin" : { "myapp" : "<relative_path_to_the_script>/script.js" } 

이 방법을 사용하면 nodemodule의 경로를 찾는 것을 피할 수 있습니다.


하지만 ... 당신이 이전 myapp bash는 스크립트를 사용하여 주장하는 경우에, 당신이 가진 모듈의 경로를 찾을 수 있습니다

myapp_path=$(npm explore -g myapp -- "pwd") 

희망이 도움이 : D

+0

고마워, 이것은 매우 도움이된다! – ciembor

관련 문제