[node.js] –save와 –save-dev의 차이점은 무엇입니까?

차이점은 무엇입니까?

npm install [package_name] --save

과:

npm install [package_name] --save-dev

이것은 무엇을 의미 하는가?



답변

  • --save-dev개발 목적으로 패키지를 저장하는 데 사용됩니다. 예 : 단위 테스트, 축소 ..
  • --save 응용 프로그램을 실행하는 데 필요한 패키지를 저장하는 데 사용됩니다.

답변

의 차이 --save와는 --save-dev당신이 당신의 자신의 프로젝트에 그들 모두를 시도하면 즉시 눈에 띄지 않을 수 있습니다. 여기 몇 가지 예가 있습니다 …

모멘트 패키지를 사용하여 날짜를 구문 분석하고 표시 하는 앱을 빌드한다고 가정하겠습니다 . 앱은 스케줄러이므로 다음과 같이 패키지를 실행해야 합니다 . 이 경우에는

npm install moment --save

패키지에 새로운 가치가 생길 것입니다.

"dependencies": {
   ...
   "moment": "^2.17.1"
}

개발할 때 테스트 스위트와 같은 도구를 사용하는 것이 실제로 도움이되며 jasmine-corekarma 가 필요할 수 있습니다 . 이 경우에는

npm install jasmine-core --save-dev
npm install karma --save-dev

이것은 또한 패키지에 새로운 가치를 창출합니다.

"devDependencies": {
    ...
    "jasmine-core": "^2.5.2",
    "karma": "^1.4.1",
}

앱을 정상 상태로 실행하기 위해 테스트 스위트가 필요 하지 않으므로--save-dev 유형 의존성입니다. 실제로 무슨 일이 일어나고 있는지 이해하지 못하면 상상하기가 어렵습니다.

NPM docs docs # dependencies 에서 직접 가져옴

의존성

종속성은 패키지 이름을 버전 범위에 매핑하는 간단한 개체로 지정됩니다. 버전 범위는 하나 이상의 공백으로 구분 된 설명자가있는 문자열입니다. tarball 또는 git URL로 종속성을 식별 할 수도 있습니다.

의존성 개체에 테스트 하네스 또는 트랜스 파일러를 넣지 마십시오. 아래의 devDependencies를 참조하십시오 .

문서에서도 테스트 하네스와 같은 모듈에 –save-dev를 사용하도록 요청합니다.

이것이 도움이 되길 바랍니다.


답변

기본적으로 NPM은 단순히 node_modules 아래에 패키지를 설치합니다. 앱 / 모듈에 대한 종속성을 설치하려는 경우 먼저 설치 한 다음 dependencies섹션에 추가해야 합니다 package.json.

--save-dev타사 패키지를 패키지의 개발 종속성에 추가합니다. 누군가 패키지를 설치할 때 설치되지 않습니다. 일반적으로 누군가 누군가 소스 리포지토리를 복제 하고 실행하는 경우에만 설치됩니다 npm install.

--save타사 패키지를 패키지의 종속성에 추가합니다. 누군가 실행할 때마다 패키지와 함께 설치됩니다 npm install package.

개발 종속성은 패키지 개발에만 필요한 종속성입니다. 여기에는 테스트 러너, 컴파일러, 패키저 등이 포함될 수 있습니다. 두 가지 유형의 종속성 모두 패키지 package.json파일에 저장 됩니다. --save에 추가 dependencies,에 --save-dev추가devDependencies

npm 설치 설명서는 여기를 참조하십시오.


답변

이에 대한 완벽한 예는 다음과 같습니다.

$ npm install typescript --save-dev

이 경우 개발에 Typescript (Javascript-parseable coding language)를 사용할 수 있지만 앱이 배포되면 모든 코드가 javascript로 변환되므로 더 이상 필요하지 않습니다. 따라서 게시 된 앱에 포함시키는 것은 의미가 없습니다. 실제로 공간 만 차지하고 다운로드 시간이 늘어납니다.


답변

예를 들어 보겠습니다.

  • 당신은 매우 SERIOUS npm 라이브러리 의 개발자입니다 . 다른 테스트 라이브러리를 사용하여 패키지를 테스트합니다.
  • 사용자가 라이브러리를 다운로드하여 코드에서 사용하려고합니다. 테스트 라이브러리도 다운로드해야합니까? 아마도 당신 jest은 테스트에 사용 하고 그들은 사용 mocha합니다. 설치 jest도 하시겠습니까? 그냥 라이브러리를 실행하려면?

권리 없다? 그래서 그들은에 devDependencies있습니다.

누군가가 할 npm i yourPackage경우 라이브러리를 실행하는 데 필요한 라이브러리 만 설치됩니다. 코드를 번들로 묶거나 테스트 및 조롱하는 데 사용한 다른 라이브러리는 라이브러리에 넣었으므로 설치되지 않습니다 devDependencies. 꽤 깔끔하지?

그래서, 개발자는 노출해야합니까 devDependancies를 ?

패키지가 오픈 소스 패키지이고 수백 명의 사람들이 패키지로 풀 요청을 보내고 있다고 가정 해 봅시다. 그러면 어떻게 패키지를 테스트할까요? 그들은 것이다 git clone당신의 repo를하고 그들이 할 것이다 때 의존성 뿐만 아니라 devDependencies을 .
그들은 당신의 패키지를 사용하지 않기 때문에. 패키지를 추가로 개발하고 있으므로 패키지를 테스트하려면 기존 테스트 사례를 통과하고 새로 작성해야합니다. 따라서 그들은 당신이 사용한 모든 테스트 / 빌딩 / 모의 라이브러리를 포함하는 것을 사용해야합니다.npm i
devDependencies


답변

@ andreas-hultgren 제안한 대로이 답변npm 문서 에 따르면 :

누군가 자신의 프로그램에서 모듈을 다운로드하여 사용할 계획이라면 아마도 사용하는 외부 테스트 또는 문서 프레임 워크를 다운로드하거나 빌드하지 않아도됩니다.

그러나 웹 응용 프로그램 개발의 경우 Yeoman (다른 것들 중에서 피어 리뷰, 미리 작성된 package.json 파일을 설치하는 스캐 폴딩 도구)은 모든 패키지를 devDependencies에 배치하고 종속성에는 의존하지 않으므로 사용하는 --save-dev것이 안전한 내기 인 것처럼 보입니다. 에서 웹 애플리케이션 개발, 적어도.


답변

--save-dev패키지 디스크립터 파일의 “devDependencies”배열에 semver 스펙을 --save저장하고 대신 “dependencies”에 저장합니다.