[node.js] node_modules에 로컬로 설치된 패키지에서 실행 파일을 사용하는 방법은 무엇입니까?

나는에서 모듈의 로컬 버전을 어떻게 사용합니까 node.js. 예를 들어 앱에서 커피 스크립트를 설치했습니다.

npm install coffee-script

이것은 그것을 설치 ./node_modules하고 coffee 명령은에 ./node_modules/.bin/coffee있습니다. 프로젝트의 기본 폴더에있을 때이 명령을 실행하는 방법이 있습니까? 번 bundle exec들러 와 비슷한 것을 찾고 있다고 생각 합니다. 기본적으로 프로젝트와 관련된 모든 사람이 사용해야하는 커피 스크립트 버전을 지정하고 싶습니다.

-g플래그를 추가하여 전 세계에 설치할 수 있으므로 커피가 어디서나 잘 작동하지만 프로젝트마다 다른 버전의 커피를 원한다면 어떻게해야합니까?



답변

업데이트 : 정세 정은 아래 답변에서 지적했듯이 npm 5.2.0부터 사용할 수 있으므로 npx [command]더 편리합니다.

5.2.0 이전 버전의 경우 오래된 답변 :

퍼팅 문제

./node_modules/.bin

PATH는 현재 작업 디렉토리가 프로젝트 디렉토리 구조의 루트 (즉, 위치 node_modules) 인 경우에만 작동한다는 것입니다

작업 디렉토리가 무엇이든, 로컬로 설치된 바이너리 경로를 얻을 수 있습니다.

npm bin

coffee프로젝트 디렉토리 계층 구조에 관계 없이 로컬로 설치된 바이너리 를 실행하려면 이 bash 구성을 사용할 수 있습니다

PATH=$(npm bin):$PATH coffee

나는 이것을 npm-exec에 별명을 붙였다.

alias npm-exec='PATH=$(npm bin):$PATH'

이제는 할 수 있습니다

npm-exec coffee

내가 어디에 있든 커피의 올바른 사본을 실행

$ pwd
/Users/regular/project1

$ npm-exec which coffee
/Users/regular/project1/node_modules/.bin/coffee

$ cd lib/
$ npm-exec which coffee
/Users/regular/project1/node_modules/.bin/coffee

$ cd ~/project2
$ npm-exec which coffee
/Users/regular/project2/node_modules/.bin/coffee


답변

좋은 예

$PATH더 이상 조작 할 필요가 없습니다 !

에서 npm@5.2.0 , NPM 과 함께 제공 npx할 수 있습니다 패키지는 로컬에서 명령을 실행 node_modules/.bin하거나 중앙 캐시를.

간단히 실행하십시오.

$ npx [options] <command>[@version] [command-arg]...

기본적으로, 또는 로컬 프로젝트 바이너리에 존재 npx하는지 확인 하고 실행합니다.<command>$PATH

호출 npx <command>할 때 <command>당신에없는 $PATH자동으로 당신을 위해 NPM 레지스트리에서 해당 이름의 패키지를 설치하고 호출합니다. 설치가 완료되면 설치된 패키지가 전 세계 어디에도 없으므로 장기적으로 오염에 대해 걱정할 필요가 없습니다. --no-install옵션 을 제공하여이 동작을 방지 할 수 있습니다 .

의 경우 다음 명령을 실행하여 패키지를 수동으로 npm < 5.2.0설치할 수 있습니다 npx.

$ npm install -g npx


답변

npm bin명령을 사용 하여 프로젝트의 노드 모듈 / bin 디렉토리를 가져 오십시오.

$ $(npm bin)/<binary-name> [args]

예 :

$ $(npm bin)/bower install


답변

사용하다 npm run[-script] <script name>

npm을 사용하여 bin 패키지를 로컬 ./node_modules디렉토리 에 설치 한 후 다음과 같이 package.json추가 하도록 수정 <script name>하십시오.

$ npm install --save learnyounode
$ edit packages.json
>>> in packages.json
...
"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "learnyounode": "learnyounode"
},
...
$ npm run learnyounode

npm install에 –add-script 옵션이나 그 밖의 것이 있거나 scripts 블록에 추가하지 않고 npm run이 작동하면 좋을 것입니다.


답변

사용하십시오 npm-run.

읽어보기에서 :

npm-run

node_modules에서 로컬 실행 파일 찾기 및 실행

npm 수명주기 스크립트에 사용 가능한 모든 실행 파일을 사용할 수 있습니다 npm-run.

용법

$ npm install mocha # mocha installed in ./node_modules
$ npm-run mocha test/* # uses locally installed mocha executable 

설치

$ npm install -g npm-run


답변

업데이트 : 언급 된 보안상의 이유로 최소한 최신 npm bin명령이 아닌이 방법을 더 이상 권장하지 않습니다 . 아래의 원래 답변 :

알다시피, 로컬로 설치된 바이너리는에 ./node_modules/.bin있습니다. 전역 적으로 사용 가능한 이진 파일이 아닌이 디렉토리에서 이진 파일을 항상 실행하려면 ./node_modules/.bin먼저 경로를 먼저 입력하는 것이 좋습니다 .

export PATH="./node_modules/.bin:$PATH"

당신이 당신이를 넣어 경우 ~/.profile, coffee항상 될 것입니다 ./node_modules/.bin/coffee가능한 경우 그렇지 않은 경우 /usr/local/bin/coffee(또는 당신이 무엇을 아래 노드 모듈을 설치하는 접두사).


답변

PATH 솔루션에는 $ (npm bin)이 .profile / .bashrc / etc에 배치되면 한 번 평가되고 경로가 처음 평가 된 디렉토리로 영원히 설정되는 문제가 있습니다. 대신 현재 경로를 수정하면 스크립트를 실행할 때마다 경로가 커집니다.

이러한 문제를 해결하기 위해 함수를 작성하여 사용했습니다. 환경을 수정하지 않고 사용하기 쉽습니다.

function npm-exec {
   $(npm bin)/$@
}

그러면 환경을 변경하지 않고도 다음과 같이 사용할 수 있습니다.

npm-exec r.js <args>