왜 글로벌 및 로컬로 펄프를 설치해야합니까?


292

gulp 에 대한 2 개의 매뉴얼에 따르면 gulp를 먼저 전역 (-g 플래그 사용)으로 설치 한 다음 로컬로 한 번 더 설치해야한다고 말합니다. 왜 이것이 필요합니까?


12
프로젝트 자체의 "시작하기"페이지도 마찬가지입니다. (또한 이유를 말하지 않습니다.)
TJ Crowder

11
npm이 로컬 패키지와 동일한 버전의 종속성 패키지를 전역 적으로 사용할 수 있기를 바랍니다. 각 프로젝트 디렉토리에 대해 5MB의 glup 기능 : /
Ciantic

@Ciantic 없음 guarantes,하지만 ... ➪ stackoverflow.com/a/25879563/444255
프랭크 Nocke

답변:


238

도구를 전체적으로 설치할 때 사용자는 노드 프로젝트 외부를 포함하여 어디에서나 명령 줄 유틸리티로 사용합니다. 노드 프로젝트의 글로벌 설치는 배치를 더 어렵게하기 때문에 좋지 않습니다 .

npm 5.2 이상

npx유틸리티와 함께 번들 npm 5.2로 해결할 수있는 문제이 문제를. 그것으로 전체적으로 설치된 유틸리티와 같이 로컬로 설치된 유틸리티를 호출 할 수 있습니다 npx. 예를 들어 로컬에 설치된을 호출하려는 경우 eslint다음을 수행 할 수 있습니다.

npx eslint .

npm <5.2

A의 사용하는 경우 script당신의 package.json의 필드 npm검색 node_modules설치 로컬 그래서뿐만 아니라 전 세계적으로 설치된 모듈과 도구는 충분하다.

따라서 (package.json에) 만족한다면 :

"devDependencies": {
    "gulp": "3.5.2"
}
"scripts": {
    "test": "gulp test"
}

등으로 실행 npm run test하면 전역 설치가 전혀 필요하지 않습니다.

두 가지 방법 모두 sudo필요하지 않기 때문에 사람들이 프로젝트를 설정하는 데 유용 합니다. 또한 의미합니다gulp package.json에서 버전이 충돌하면 업데이트되므로 모든 사람이 프로젝트로 개발할 때 동일한 버전의 꿀꺽 꿀꺽 사용합니다.

추가:

꿀꺽 꿀꺽 사용하는 경우 전 세계적으로 비정상적인 동작이있는 것으로 보입니다. 전역 설치로 사용될 때 gulp는 로컬로 설치된 gulp를 찾아 제어를 전달합니다. 따라서 gulp 전역 설치에는 gulp 로컬 설치가 필요합니다. 위의 대답은 여전히 ​​선언됩니다. 로컬 설치는 항상 글로벌 설치보다 선호됩니다.


3
네,하지만 인터넷에 접속할 수 없을 때는 어떻습니까? Gulp가 전역 적으로 설치되지 않은 경우 어떻게 사용할 수 있습니까?
IGRACH

3
@IGRACH 위 스크립트는 인터넷 연결을 사용하지 않습니다. package.json에서 스크립트 필드를 사용하지 않고 동일한 작업을 수행하려면을 사용하십시오 ./node_modules/.bin/gulp.
qubyte

1
나는 별칭을 정의 gulp하고 coffee있으므로 명령을 내 노드 프로젝트 루트에서 작업 (예. alias gulp="node_modules/.bin/gulp"). 이런 식으로 필요한 경우 명령을 사용하기 쉽고 글로벌 / 로컬 버전 충돌이 발생하지 않습니다.
vesse

@qubyte 감사합니다! 로컬로 설치하는 것이 일반적으로 좋은 방법이라고 생각합니다. 질문이 하나 더있어 내 마음을 정리하는 데 도움이되기를 바랍니다. Gulp의 문서가 로컬로 설치하지 않고 제안한 것처럼 전 세계적으로 설치하려고했습니다. 따라서 실행하려고 gulp하면 다음과 같은 오류 메시지가 나타납니다 Local gulp not found in .... 내가 이해하는 한 먼저 로컬 node_modules를 살펴보고 찾지 못하면 전역으로 설치된 모듈을 조사해야합니까? 감사!
yeelan

1
부록을 추가했습니다. 잘만되면 그것은 꿀꺽 꿀꺽 이상한 것을 다루고 있습니다.
qubyte

82

TLDR; 이유는 다음과 같습니다 .

이것이 작동하는 이유는 로컬에 설치된 버전을 사용하여 gulp실행하려고하기 때문 입니다. 여기를 참조 하십시오 . 따라서 전 세계적으로 로컬에서 꿀꺽 꿀꺽 설치 한 이유입니다.gulpfile.jsgulp

기본적 gulp으로 로컬로 설치할 때 스크립트가 없으므로 쉘을 PATH입력 gulp하여 명령을 찾을 수 없습니다 . 전역 디렉토리 를 설치 하면 전역 디렉토리가 경로에있을 가능성이 높기 때문에 gulp스크립트가 시작됩니다 .PATHnode/bin/

그러나 로컬 종속성을 존중하려면 gulp로컬로 설치된 버전 자체를 사용하여을 실행하십시오 gulpfile.js.


1
~ / bin은 사용자 별 바이너리에 대한 Unix 규칙이며 기본적으로 많은 OS에서 PATH입니다. 꿀꺽 꿀꺽 꿀꺽 거기에서 바이너리를 연결할 수 있어야합니다.
mikemaccana

2
다시 말하면 경로에 넣으려면 전역 적으로 설치된 gulp패키지가 필요 node_modules/.bin/gulp합니다. 스토리지는 저렴하지만 심볼릭 링크를 시뮬레이트하기 위해 MB를 버리는 것은 IMO 순도입니다.
ntd

79

gulp로컬로 설치된 전역 링크 를

npm link gulp

1
로컬 설치를 사용하는 것이 가장 좋지만 설치할 수 없거나 원하지 않는 경우가 있습니다 (전용 CI 서버가 전역 적으로 설치되어 있고 모든 커밋마다 다시 설치한다고 상상해보십시오) . 어쨌든 npm link.
gion_13

1
난 당신이 무슨 짓을했는지 참조. 영리 해요
deepelement

이것은 질문에 대답하지 않습니다
mikemaccana

1
아니요, 그냥 무효화합니다.
베리 슬라 프 로팍

67

" 전역 및 로컬로 왜 꿀꺽 꿀꺽 설치해야합니까? "

  1. 이미 전역에 설치 한 경우 gulp를 로컬로 설치해야하는 이유는 무엇입니까?

  2. 이미 로컬에 설치 한 경우 왜 글로벌로 설치해야합니까?

다른 여러 사람들이이 질문들에 대한 훌륭한 답변을 따로 제공했지만 통일 된 답변으로 정보를 통합하는 것이 도움이 될 것이라고 생각했습니다.

이미 전역에 설치 한 경우 gulp를 로컬로 설치해야하는 이유는 무엇입니까?

꿀꺽 꿀꺽 로컬에 설치하는 이유는 다음과 같은 몇 가지 이유로 구성됩니다.

  1. 프로젝트의 종속성을 로컬로 포함하면 사용 된 gulp 버전 (또는 다른 종속성)이 원래 의도 된 버전이됩니다.
  2. require ()를 사용할 때 노드는 기본적으로 전역 모듈을 고려하지 않습니다 (스크립트에 gulp를 포함해야 함). 궁극적으로 이는 전역 모듈에 대한 경로가 기본적으로 NODE_PATH에 추가되지 않기 때문입니다.
  3. 노드 개발 팀에 따르면 로컬 모듈이 더 빨리로드됩니다. 나는 이것이 왜 그런지 말할 수는 없지만 이것은 개발 (즉, dev 의존성)보다 생산 (즉, 런타임 의존성)에서 노드의 사용과 더 관련이있는 것 같습니다. 로컬 모듈과 전역 모듈을로드 할 때 얻을 수있는 사소한 속도 이점에 관심이있을 수 있기 때문에 이것이 합법적 인 이유라고 생각하지만이 이유로 눈썹을 자유롭게 올리십시오.

이미 로컬에 설치 한 경우 왜 글로벌로 설치해야합니까?

  1. gulp를 전 세계적으로 설치하는 이유는 실제로 시스템 경로 내에서 gulp 실행 파일을 자동으로 찾는 편의성입니다.

로컬로 설치하지 않으려면을 사용할 수 npm link [package]있지만 link 명령뿐만 아니라 명령도 install --global지원하지 않는 것 같습니다--save-dev 옵션 방법은 전 세계적으로 gulp를 설치 한 다음 쉬운 버전을 쉽게 추가 할 수있는 방법이 없다는 것을 의미합니다 로컬 package.json 파일

궁극적으로 모든 프로젝트에서 공통 도구 설치를 피할 수 있도록 글로벌 모듈을 사용하는 옵션을 사용하는 것이 더 합리적이라고 생각합니다. 특히 grunt, gulp, jshint 등과 같은 개발 도구의 경우에는 더욱 그렇습니다. 곡물에 맞서 싸울 때 도구와 약간 싸우는 것 같습니다.


7
인터넷 전체에서 첫 번째 사람으로 +1하여 질문에 두 가지 점이 있음을 지적했습니다. 어디서나 대부분의 사람들은 단지 "로컬을 이미 설치 한 경우 왜 글로벌로 설치해야합니까?"라고 대답합니다. 내가 알고 싶은 것은 "글로벌을 이미 설치 한 경우 왜 로컬로 gulp를 설치해야합니까?"였습니다.
Nathan JB

10
이 질문에 정교한 설명이 필요하다는 것은 이것이 논리적으로 작동하는 방식이 아니라는 것을 의미합니다. 각 프로젝트마다 동일한 도구를 반복해서 설치할 필요는 없습니다.
코코 도코

4
당신의 대답은 너무 아름답습니다. 내 말은 80 % 욕설이었을 것이다. 툴링 관점에서 로컬 설치 이론은 옳을 지 모르지만 OS 관점과 패키지 관리자 관점에서 이것은 너무 미친 말로 찾을 수 없습니다. NPM / gulp 사람들은 어떤 약을 복용합니까?!? 아무도 동의하지 않으면 dpkg, yum, pacman 및 co와 같은 시스템 패키지 관리자가 어떻게되는지 읽어보십시오. 작업.
JepZ

2
@JepZ 그래도 슈퍼 이상한 것입니다. 노드 또는 npm에는 이것을 강제로하는 것이 없습니다. 프로젝트에 특정 버전의 꿀꺽 꿀꺽 유지하는 것은 꿀꺽 거리는 사람이 정기적으로 패치 버전을 깨는 경우에만 의미가 있습니다. 다른 빌드 도구는 일반적으로 전역 설치입니다. 그러나 아. 맹세를 위해 여기에.
Stoffe

2
커뮤니티가 원사를 사용하여 이동함에 따라 이제는 실제로 문제가되지 않습니다. :)
Derek Greer

8

node_modules로컬 설치 의 폴더가에있는 경우 기술적으로 전역으로 설치할 필요가 없습니다 PATH. 일반적으로 이것은 좋은 생각이 아닙니다.

또는 npm test참조 gulp라면 다음을 입력하십시오.npm test 하면 로컬 꿀꺽 마실 것입니다.

전 세계적으로 꿀꺽 꿀꺽 꿀꺽 설치 한 적이 없습니다. 나쁜 형태라고 생각합니다.


3
경로에 넣는 것보다 더 나은 방법은 NPM 스크립트를 사용하는 것입니다
Jay

2

우리의 문제가 로컬에서만 gulp를 설치하는 것과 직접 관련이 있는지 확실하지 않습니다. 그러나 우리는 많은 의존성을 스스로 설치해야했습니다. 이로 인해 "거대한"package.json이 발생하며 로컬에서만 꿀꺽 꿀꺽 설치하는 것이 좋은 아이디어인지 확실하지 않습니다. 빌드 환경 때문에 그렇게해야했습니다. 그러나 꼭 필요한 것이 아니라면 꿀꺽 꿀꺽을 전 세계에 설치하지 않는 것이 좋습니다. 우리는 다음과 같이 비슷한 문제에 직면했습니다. 블로그 게시물 했습니다.

이러한 문제는 로컬 컴퓨터에서 모든 개발자가 전 세계에 꿀꺽 꿀꺽 설치했기 때문에 발생하지 않습니다. 빌드 시스템에서 설명 된 문제가있었습니다. 누군가 관심이 있다면이 문제에 대해 더 깊이 이해할 수 있습니다. 그러나 지금은 로컬에서만 꿀꺽 꿀꺽 설치하는 것이 쉽지 않다는 것을 언급하고 싶었습니다.


예,이 문제에 대해 자세히 알아보십시오.
kenorb

1

내가 여기에서 보지 못했기 때문에 MacOS 또는 Linux를 사용하는 경우 bashrc (bashrc 등)에 이것을 추가하는 것이 좋습니다.

node_modules/.bin

이 상대 경로 항목을 사용하여 노드 프로젝트의 루트 폴더에 앉아있는 경우 "글로벌 설치"에 대해 걱정하지 않고 명령 줄 도구 (eslint, gulp 등)를 실행할 수 있습니다. npm run 등에 .

이 작업을 수행 한 후에는 전 세계적으로 모듈을 설치 한 적이 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.