node_modules에 로컬로 설치된 패키지의 실행 파일을 사용하는 방법은 무엇입니까?
에서 node.js
예를 들어 앱에 커피 스크립트를 설치했습니다.
npm install coffee-script
설치위에 됩니다../node_modules
는 그고커명다같습다니음과은에 있습니다../node_modules/.bin/coffee
프로젝트의 기본 폴더에 있을 때 이 명령을 실행할 수 있는 방법이 있습니까? 비슷한 것을 찾고 있는 것 같습니다bundle exec
하는 모든 해야 하는 기본적으로 프로젝트에 참여하는 모든 사람이 사용해야 하는 커피 스크립트 버전을 지정하고 싶습니다.
다음을 추가할 수 있습니다.-g
커피가 어디서나 잘 작동하도록 글로벌 설치 플래그를 지정합니다. 하지만 프로젝트별로 다른 버전의 커피를 원한다면 어떻게 해야 할까요?
업데이트: 정세영이 아래 답변에서 지적했듯이, npm 5.2.0부터 사용할 수 있습니다.npx [command]
어느 쪽이 더 편리합니까?
5.2.0 이전 버전에 대한 이전 답변:
퍼팅의 문제점
./node_modules/.bin
는 현재 디렉터리가 작디즉일프구루디다가트현조리트렉의니토로리젝, ▁of▁location즉일다▁into▁of▁(▁your▁is).node_modules
)
작업 디렉터리와 상관없이 로컬로 설치된 이진 파일의 경로를 가져올 수 있습니다.
npm bin
로컬로 설치된 시스템을 실행하려면 다음과 같이 하십시오.coffee
계층의 이 할 수 .
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 설치에 --add-script 옵션 등이 있거나 스크립트 블록에 추가하지 않고 npm 실행이 가능하다면 좋을 것입니다.
업데이트: 최근 npm(버전 > 5.2)에 있는 경우
사용할 수 있는 항목:
npx <command>
npx
에서 명령을 ..bin
node_modules
오래된 대답:
Windows의 경우
을 다파일저음을장다니합▁called▁file▁storenpm-exec.bat
그리고 그것을 당신의 것에 추가합니다.%PATH%
@echo off
set cmd="npm bin"
FOR /F "tokens=*" %%i IN (' %cmd% ') DO SET modules=%%i
"%modules%"\%*
사용.
그러면 이렇게 사용하시면 됩니다.npm-exec <command> <arg0> <arg1> ...
예를들면
wdio
디렉토리에 되어 있는 dodo:do node_http:node_http:node_http://▁directory 에 설치되어 .
npm-exec wdio wdio.conf.js
즉, 실행될 것입니다..\node_modules\.bin\wdio wdio.conf.js
업데이트: 언급된 보안상의 이유뿐만 아니라 최신 버전의 이유로 더 이상 이 방법을 권장하지 않습니다.npm bin
아래와 .아래의 원답:
로 설치된 바이너리는 로로설모바는리에 ../node_modules/.bin
가능한 바이너리가 아닌 이는, 만약한다면, 글하게사가바용아가닌항면리로위바다존해한재만실약기행하를이리너서벌디에상이렉리토이능너한▁rather,▁in▁in면▁i▁present,▁you존다한,만재▁binaries▁directory▁run▁put▁this▁suggest▁available▁if글▁binaries,./node_modules/.bin
당신의 길에서 첫 번째 단계:
export PATH="./node_modules/.bin:$PATH"
을 이을당것넣에으에 .~/.profile
,coffee
항상 그럴 것입니다../node_modules/.bin/coffee
한 경우, 그렇지 않은 경우, 사용 가능한 경우/usr/local/bin/coffee
(또는 노드 모듈을 설치할 접두사).
사용합니다.
리드미어에서:
npm 운영의
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
TL;DR: 사용npm@>=7
.
그npx
는 다른답서언명완령다전작시다성니습었되히은급변으로 완전히 고쳐 .npm@7
으로 본적으함제항목는되와 함께 됩니다.node@15
는 에설할수다니에 할 수 .node@>=10
구현은 이제 새로 도입된 것과 동일합니다.npm exec
의 명령과 .npx
명령 이행
가지 설치되지 때 종속성을 ▁one▁be▁par▁also▁the▁if▁it▁ecan▁shouldency있rence▁is수음▁interact도written▁always▁thatg▁(▁depend▁it▁diffe덮쓸어다ively▁asks▁with니▁a▁over것여(하▁is사용ed▁already입--yes
또는--no
).
에 다은의예다니의 .npm exec
(이중 대시(대시▁the이▁double)--
는 를구니다합분을 구분합니다.npm exec
실제 명령 파라미터:
npm exec --no -- jest --coverage
에 대한 업데이트된 공식 설명서도 참조하십시오.
npm을 유지하려면 npx가 필요한 작업을 수행해야 합니다.
yarn(페이스북으로 오후 교체)으로 전환하는 것이 선택사항이라면 다음과 같이 전화할 수 있습니다.
yarn yourCmd
패키지 내부의 스크립트.json이 우선할 것입니다, 만약 아무 것도 발견되지 않으면 그것은 내부를 볼 것입니다../node_modules/.bin/
폴더를 누릅니다.
또한 실행한 내용을 출력합니다.
$ yarn tsc
yarn tsc v0.27.5
$ "/home/philipp/rate-pipeline/node_modules/.bin/tsc"
따라서 각 명령에 대해 스크립트를 설정할 필요가 없습니다.package.json
.
에 정의된 가 있는 .scripts
의 음에속에.package.json
:
"tsc": "tsc" // each command defined in the scripts will be executed from `./node_modules/.bin/` first
yarn tsc
와 동등할 것입니다.yarn run tsc
또는npm run tsc
:
yarn tsc
yarn tsc v0.27.5
$ tsc
PATH 솔루션에는 $(npm bin)가 .profile/.bashrc/etc에 배치된 경우 한 번 평가되고 경로가 처음 평가된 디렉토리로 영구적으로 설정된다는 문제가 있습니다.대신 현재 경로를 수정하면 스크립트를 실행할 때마다 경로가 증가합니다.
이러한 문제를 해결하기 위해 함수를 만들어 사용했습니다.사용자 환경을 수정하지 않고 사용하기 쉽습니다.
function npm-exec {
$(npm bin)/$@
}
그러면 환경을 변경하지 않고 다음과 같이 사용할 수 있습니다.
npm-exec r.js <args>
저는 셸 별칭이나 다른 패키지에 의존하지 않는 것을 선호합니다.
에 간단한 줄 scripts
의 의션 package.json
할 수 . 예를 들어, npm 명령을 실행할 수 있습니다.
npm run webpack
꾸러미제이손
{
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"webpack": "webpack"
},
"devDependencies": {
"webpack": "^4.1.1",
"webpack-cli": "^2.0.11"
}
}
디렉터리를 이을 "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "".bashrc
-독립적(또는 정의하는 모든 것 뒤에)PATH
):
__OLD_PATH=$PATH
function updatePATHForNPM() {
export PATH=$(npm bin):$__OLD_PATH
}
function node-mode() {
PROMPT_COMMAND=updatePATHForNPM
}
function node-mode-off() {
unset PROMPT_COMMAND
PATH=$__OLD_PATH
}
# Uncomment to enable node-mode by default:
# node-mode
이렇게 하면 프로젝트 크기에 따라 bash 프롬프트가 렌더링될 때마다 짧은 지연이 추가될 수 있으므로 기본적으로 사용할 수 없습니다.
에서 터널내를실활성화및있수다습니비할활을 실행하여 활성화 및 할 수 .node-mode
그리고.node-mode-off
각각 다음과 같다.
저는 패키지에 스크립트를 만드는 이 문제를 해결하기 위해 항상 @gunessus와 동일한 접근 방식을 사용해 왔습니다.json 파일을 사용하고 npm run script-name을 실행합니다.
하지만, 최근 몇 달 동안 저는 npx를 사용하고 있고 그것을 좋아합니다.
예를 들어 Angular 프로젝트를 다운로드했는데 Angular CLI를 글로벌하게 설치하고 싶지 않았습니다.따라서 npx를 설치한 경우 다음과 같이 global angular cli 명령을 사용하는 대신 다음과 같이 사용할 수 있습니다.
ng serve
콘솔에서 이 작업을 수행할 수 있습니다.
npx ng serve
여기 제가 NPX에 대해 쓴 기사가 있습니다. 그 기사는 NPX에 대해서요.
동일한 @일반적인 솔루션이지만 생선 껍질 맛
if not contains (npm bin) $PATH
set PATH (npm bin) $PATH
end
zxc는 nodejs의 "sysec exec"과 같습니다.사용하는 것과 비슷합니다.PATH=$(npm bin):$PATH
:
$ npm install -g zxc
$ npm install gulp
$ zxc which gulp
/home/nathan/code/project1/node_modules/.bin/gulp
또한 direnv를 사용하고 작업 폴더에서만 $PATH 변수를 변경할 수 있습니다.
$ cat .envrc
> export PATH=$(npm bin):$PATH
합니다..bashrc
그럼 전화하셔도 됩니다.coffee
또는 지역적인 모든 것.이것은 랩톱에 유용하지만 서버에서 사용하지 마십시오.
DEFAULT_PATH=$PATH;
add_local_node_modules_to_path(){
NODE_MODULES='./node_modules/.bin';
if [ -d $NODE_MODULES ]; then
PATH=$DEFAULT_PATH:$NODE_MODULES;
else
PATH=$DEFAULT_PATH;
fi
}
cd () {
builtin cd "$@";
add_local_node_modules_to_path;
}
add_local_node_modules_to_path;
참고: 이 스크립트는 다음과 같은 별칭을 만듭니다.cd
명령의 각 에, 리고각호출후그호후▁command출▁each각,cd
그것은 확인합니다.node_modules/.bin
그리고 그것을 당신의 것에 추가합니다.$PATH
.
참고 2: 세 번째 줄을 다음으로 변경할 수 있습니다.NODE_MODULES=$(npm bin);
하지만 그것은cd
명령이 너무 느립니다.
Windows의 경우 다음을 사용합니다.
/* cmd into "node_modules" folder */
"%CD%\.bin\grunt" --version
저는 같은 문제에 직면했고 저는 별칭을 사용하는 것을 특별히 좋아하지 않습니다(일반적으로 제안하는 것처럼). 만약 여러분이 별칭을 사용하는 것이 마음에 들지 않는다면, 여기 제가 사용하는 또 다른 해결 방법이 있습니다. 먼저 작은 실행 파일 bash 스크립트를 만들어야 합니다. setenv.sh : : :
#!/bin/sh
# Add your local node_modules bin to the path
export PATH="$(npm bin):$PATH"
# execute the rest of the command
exec "$@"
그런 다음 로컬에서 실행 파일을 사용할 수 있습니다./bin
다음 명령 사용:
./setenv.sh <command>
./setenv.sh 6to5-node server.js
./setenv.sh grunt
를 사용하는 scripts
그렇다면:그럼 json:
...,
scripts: {
'start': './setenv.sh <command>'
}
이것이 안전하지 않은/나쁜 아이디어인지 알고 싶지만, 조금 생각해 본 결과 여기에는 문제가 없습니다.
하지 않은 하기, 리스의을션수여추끝가, .npm bin
에서 " 디토리를찾스호만다출니합트립크고렉▁call다호니▁to합▁the출▁find▁only▁script,"만 호출하도록 합니다.npm bin
…일 package.json
부모에게 존재한다(속도를 위해), 이것이 제가 생각해낸 것입니다.zsh
:
find-up () {
path=$(pwd)
while [[ "$path" != "" && ! -e "$path/$1" ]]; do
path=${path%/*}
done
echo "$path"
}
precmd() {
if [ "$(find-up package.json)" != "" ]; then
new_bin=$(npm bin)
if [ "$NODE_MODULES_PATH" != "$new_bin" ]; then
export PATH=${PATH%:$NODE_MODULES_PATH}:$new_bin
export NODE_MODULES_PATH=$new_bin
fi
else
if [ "$NODE_MODULES_PATH" != "" ]; then
export PATH=${PATH%:$NODE_MODULES_PATH}
export NODE_MODULES_PATH=""
fi
fi
}
위해서bash
를사하대신을 사용하는 precmd
후크, 당신은 사용할 수 있습니다.$PROMPT_COMMAND
변수(나는 이것을 테스트하지 않았지만 당신은 이해할 수 있습니다):
__add-node-to-path() {
if [ "$(find-up package.json)" != "" ]; then
new_bin=$(npm bin)
if [ "$NODE_MODULES_PATH" != "$new_bin" ]; then
export PATH=${PATH%:$NODE_MODULES_PATH}:$new_bin
export NODE_MODULES_PATH=$new_bin
fi
else
if [ "$NODE_MODULES_PATH" != "" ]; then
export PATH=${PATH%:$NODE_MODULES_PATH}
export NODE_MODULES_PATH=""
fi
fi
}
export PROMPT_COMMAND="__add-node-to-path"
는 는나입니다.Windows
사용자와 이것이 저에게 도움이 되었습니다.
// First set some variable - i.e. replace is with "xo"
D:\project\root> set xo="./node_modules/.bin/"
// Next, work with it
D:\project\root> %xo%/bower install
행운을 빌어요.
를 사용하는 .fish shell
에추고싶않에 .$path
파일을 할 수 .아래 기능을 추가하여 로컬 노드 실행 파일을 실행할 수 있습니다.
### run executables in node_module/.bin directory
function n
set -l npmbin (npm bin)
set -l argvCount (count $argv)
switch $argvCount
case 0
echo please specify the local node executable as 1st argument
case 1
# for one argument, we can eval directly
eval $npmbin/$argv
case '*'
set --local executable $argv[1]
# for 2 or more arguments we cannot append directly after the $npmbin/ since the fish will apply each array element after the the start string: $npmbin/arg1 $npmbin/arg2...
# This is just how fish interoperate array.
set --erase argv[1]
eval $npmbin/$executable $argv
end
end
이제 다음과 같은 작업을 실행할 수 있습니다.
n coffee
또는 다음과 같은 인수가 있습니다.
n browser-sync --version
이 참로면, 만당이신.bash
@Bob9630의 bash를 입니다.$@
에서 수할 없는용에서 할 수 없는 것.fishshell
.
제가 개발한 새로운 솔루션을 제안합니다(2021년 5월).
lpx https://www.npmjs.com/package/lpx 을 사용하여
- 로컬 node_bin/.bin 폴더에 있는 이진 파일을 실행합니다.
- 워크스페이스 루트의 node_bin/.bin에 있는 이진 파일을 워크스페이스 내의 임의의 위치에서 실행합니다.
로컬에서 이진을 찾을 수 없는 경우(즉, npx와 동일하지 않음) lpx는 패키지를 다운로드하지 않습니다.
예:lpx tsc -b -w
실행합니다.tsc -b -w
스크립트
커피 스크립트를 패키지에 포함합니다.json은 각 프로젝트에 필요한 특정 버전으로, 일반적으로 다음과 같습니다.
"dependencies":{
"coffee-script": ">= 1.2.0"
그런 다음 npm install을 실행하여 각 프로젝트에 종속성을 설치합니다.그러면 각 프로젝트에서 로컬로 액세스할 수 있는 지정된 버전의 커피 스크립트가 설치됩니다.
언급URL : https://stackoverflow.com/questions/9679932/how-to-use-executables-from-a-package-installed-locally-in-node-modules
'source' 카테고리의 다른 글
C#의 문자열과 열거형 연결 (0) | 2023.05.12 |
---|---|
프로젝트 빌드 설정이 adSYM 파일을 생성하고 있는지 확인합니다.모든 구성에 대해 DEBUG_INFORMAT을 dwarf-with-dsym으로 설정해야 합니다. (0) | 2023.05.12 |
MongoDB에 null을 저장하는 중과 키를 전혀 저장하지 않는 중 (0) | 2023.05.12 |
OS X 매버릭스용 Eclipse Kepler 요청 Java SE 6 (0) | 2023.05.12 |
IIS 7 AppPool ID를 SQL Server 로그온으로 추가 (0) | 2023.05.12 |