2016-10-03 5 views
2

저는 이곳에서 npm을 처음 사용하기 때문에 뭔가를 얻지 못할 수도 있습니다. npm은 프로젝트에 로컬 인 npm_modules 디렉토리에 모듈을 설치하거나 --global을 사용하여 시스템 전체에 모듈을 설치할 수 있음을 알고 있습니다.NMS에서 일을 세계적으로 설치하는 것은 나쁜 습관입니까?

일시적인 편의를위한 것 외에도 왜 패키지를 전 세계적으로 설치하겠습니까? 예를 들어 typescript의 전역 설치를 수행하는 모든 종류의 npm 구성/설정을 볼 수 있습니다. 하지만 내 컴퓨터에 5 개의 프로젝트가 있고 그 중 3 개가 다른 버전의 타이피 스크립트를 사용하면 좋지 않습니다 ... 맞습니까?

패키지 관리에 대한 나의 경험은 모든 모듈이 글로벌 위치 (~/.m2/repository)에 설치되었지만 ANYTHING (cmd/tool/plugin 또는 종속성)을 참조하는 Java /) 버전 번호를 지정해야합니다. 따라서 중복 패키지 설치 제거 및 완벽하게 재현 가능한 빌드의 두 가지 장점을 모두 누릴 수 있습니다. 나는 npm이 그 자신의 방식대로 똑같은 것을 성취 할 것이라고 생각했을 것이다.

무엇이 누락 되었습니까?

+2

예, 좋지 않습니다. 저장소 레벨 설치가 선호됩니다. –

+0

FYI - 로컬 저장소에서 "도구"를 실행할 수 있습니다 : http : // stackoverflow.com/questions/9679932/how-to-use-package-installed-nodes-in-node-modules – HDave

답변

2

Maven은 전 세계적으로 아무것도 설치하지 않습니다. 모든 새로운 빌드에 대해 모든 것을 다운로드하지 못하도록 로컬 "전역"저장소를 유지하지만 모든 프로젝트에는 pom 파일에 정의한 모든 라이브러리의 자체 버전이 있습니다.

npm의 경우 일반적으로 grunt-cli 및 karma-cli와 같이 일부 툴링을 설치 한 다음 각 프로젝트의 package.json에 해당 프로젝트의 버전에 필요한 모듈/라이브러리를 정의합니다.

+0

그러나 karma-cli를 버전 1.0으로 전 세계적으로 설치한다고 가정 해 봅시다. 버전 3.0. 우리가 그것을 실행할 때 우리가 다른 결과를 얻는 것이 가능하지 않을까요? 나는 그것이 단지 도구 일 뿐이지 만, 어떤 도구 버전은 다른 결과를 만들어 낸다. – HDave

3

npm 1.0 release notes이 근거 명확히 : 일반적으로

를, 엄지 손가락의 규칙은 다음과 같습니다

  1. 당신은 당신이 사용하여 프로그램, 에서 사용할 뭔가를 설치하는 경우 ('무엇이든')을 요구하고, 프로젝트에 루트에 로컬로 설치하십시오.
  2. 는 전 세계적으로 설치, 명령 행 또는 무언가에 당신이 당신의 에서 사용하고자하는 무언가를 설치하는 경우, 그 바이너리가 PATH 환경 변수에 결국 너무 .
+1

이것이 사용 된 방법의 현재 상태를 요약 한 것 같습니다. 그러나 @jwenting 대답처럼 도구의 다른 버전이 다른 최종 아티팩트를 생성하지 않는다고 가정하지는 않습니까? tsc v1.8은 tsc v2.0과 동일한 출력을 생성하도록 100 % 보장됩니까? 최종적으로 말한 CI 서버를 가지고 있기 때문에 저는 방금 농담을합니다. – HDave

+0

아마도 소프트웨어 개발에서 보행자가 자산 일 수 있습니다. 요점은 : 어떤 도구 나 모듈의 다른 주요 버전이 동일한 출력을 내놓을 수있는 것은 아닙니다. 전역 적으로 설치되는 툴 (예 :'tsc')을 가지고 있다면, 적당한 버전의 간격으로 모듈 버전을 업데이트하거나 동기화하기 위해 CI에 단계를 둡니다. 실제로 이런 종류의 문제와 관련된 보이지 않는 빌드 문제는 없었습니다. 버그의 경우, 테스트 (또는 tsc 자체)는 큰소리로 불평해야하고 문제를 아주 분명하게 나타내야합니다. – msanford

5

당신은 당신의 코드 (타이프 라이터, 웹팩, 바벨)를 변환하기위한 여러 도구로 작업하는 경우 및 로컬 다른 패키지 작업과 함께 연결하고자하는, 내가 확실히 전 세계적으로 일을 설치를 권하고 싶지 않다 전역 구성 요소를 업데이트 할 때 많은 어려움을 겪습니다. 심지어 웹팩 팀 discourage 두 번째 버전을 전세계에 설치 :

webpack 명령은 이제 전 세계적으로 사용할 수 있습니다.

그러나 권장되는 방법은 아닙니다. 그러면 webpack의 특정 버전으로 잠기고 다른 버전을 사용하는 프로젝트에서 실패 할 수 있습니다.