필요한 경우 npm 확인 및 패키지 업데이트


471

Karma 테스트 러너를 TeamCity에 통합해야하며,이를 위해 sys-engineers에게 다음과 같은 작은 스크립트 (powershell 또는 기타)를 제공하고 싶습니다.

  1. 일부 구성 파일에서 원하는 버전 번호를 선택하십시오 (나는 그것을 주석으로 넣을 수 있다고 생각합니다 karma.conf.js)

  2. npm의 글로벌 저장소에 정의 된 카르마 러너 버전이 설치되어 있는지 확인

  3. 그렇지 않은 경우 또는 설치된 버전이 원하는 것보다 오래된 경우 : 올바른 버전을 선택하여 설치하십시오.

  4. 그것을 실행 : karma start .\Scripts-Tests\karma.conf.js --reporters teamcity --single-run

제 진짜 질문은 "원하는 버전의 패키지가 설치되어 있다면 어떻게 스크립트를 체크인 할 수 있습니까?"입니다. 확인을해야합니까 아니면 npm -g install매번 전화하는 것이 안전 합니까?

다른 구성 값이 호환되지 않을 수 있기 때문에 항상 사용 가능한 최신 버전을 확인하고 설치하고 싶지 않습니다.

답변:


609

프로젝트의 어떤 모듈이 '이전'인지 확인하려면 :

npm outdated

' 구식 '은 정의 된 모든 모듈을 확인 package.json하고 NPM 레지스트리에 최신 버전 이 있는지 확인합니다 .

예를 들어, 말 xml2js 0.2.6(에있는 node_modules현재 프로젝트) 최신 버전 (0.2.7) 존재하기 때문에 오래된된다. 당신은 볼 것이다 :

xml2js@0.2.7 node_modules/xml2js current=0.2.6

모든 종속성 을 업데이트 하려면 확신이있는 경우 다음을 수행하십시오.

npm update

또는 xml2js다음 과 같은 단일 종속성을 업데이트하려면

npm update xml2js

6
npm update특히 조심하십시오 npm update -g... 대부분의 사람들이 기대하는 것은 아닙니다! 참조 : github.com/npm/npm/issues/6247gist.github.com/othiym23/4ac31155da23962afd0e
jbandi

6
@jbandi npm@2.6.1 npm -g update부터 다시 사용하는 것이 안전합니다. github.com/npm/npm/issues/6247#issuecomment-92182814
Chuck Le Butt

7
npm 업데이트는 @Erik Olson의 답변에 명시된 것처럼 package.json 파일을 업데이트하지 않습니다.
Ehtesham Hasan

5
As of npm@5.0.0, 'npm update' will change package.json to save the new version as the minimum required dependency docs.npmjs.com/cli/update.html
Sidney

368

npm outdated업데이트해야 할 패키지를 식별하고 npm update <package name>각 패키지를 업데이트하는 데 사용할 수 있습니다. 그러나 npm@5.0.0 이전 npm update <package name>에는 문제가있는 package.json의 버전이 업데이트되지 않습니다.

가장 좋은 워크 플로우는 다음과 같습니다.

  1. 오래된 패키지 식별
  2. 패키지의 버전을 업데이트하십시오.
  3. npm update각 패키지의 최신 버전을 설치하기 위해 실행

npm-check-updates이 워크 플로에 도움이되도록 확인하십시오 .

  • npm-check-updates 설치
  • npm-check-updates오래된 패키지를 나열하기 위해 실행하십시오 (기본적으로 running과 동일 npm outdated)
  • npm-check-updates -upackage.json의 모든 버전을 업데이트하려면 실행하십시오 (이것은 마술 소스입니다)
  • npm update업데이트 된 패키지를 기반으로 새 버전의 패키지를 설치하려면 평소와 같이 실행하십시오.

3
npm outdated모든 패키지를 보여줍니다. 다른 패키지 내부에서도 ..이 절차로 업데이트되지 않으므로 항상 나타납니다. 따라서 npm-check-updates실제로 권장 package.json되는대로 사용하십시오.
davidhq

원사를 사용하면 '원사 업그레이드'를 입력하는 것이 훨씬 쉽습니다.
Christopher Grigg

17
패키지 관리자를 관리하기 위해 업데이트 관리자를 설치해야하는 이유는 무엇입니까? 이것이 바보라는 데 동의하지 않습니까? 그것은 간단 npm install --all-outdated하지만 간단 하지 않습니다 ...
ADJenks

3
npm update --save package_namepackage.json에 대한 최신 변경 사항을 저장하기 위해 항상 실행할 수 있습니다 .
trungk18

Erik, 이 SO 질문에 친절하게 대답 할 수 있습니까? 왜냐하면 여전히 두 명령의 차이점, 즉 npm updatevs npm-check-updates?
João Pimentel Ferreira

146

"fresh"모듈도 있습니다 npm-check:

npm-check

오래되고 부정확하며 사용되지 않는 종속성을 확인하십시오.

여기에 이미지 설명을 입력하십시오

또한 종속성을 업데이트하는 편리한 대화식 방법을 제공합니다.


78

쉬운 단계 :

$ npm i -g npm-check-updates && ncu -u && npm i

그게 다야 모든 패키지 버전 package.json은 최신 주요 버전이됩니다.

편집하다:

여기서 무슨 일이 일어나고 있습니까?

  1. 업데이트를 확인하는 패키지 설치

  2. 이 패키지를 사용하여 package.json(-u는 --updateAll의 약자)의 모든 패키지 버전을 업데이트하십시오 .

  3. 새로운 버전의 패키지를 모두 설치하십시오.


3
@imnickvaughn ncu은 노드 확인 업데이트를 나타내며 -a'upgradeAll'옵션입니다. 모든 옵션을 여기에서 찾으십시오 : npmjs.com/package/npm-check-updates
Arian Acosta

ncu와 같은 다른 패키지를 사용하지 않고 한 줄로하고 싶다면 어떻게해야합니까?
ADJenks

또는 글로벌 설치가없는 경우npx -p npm-check-updates ncu -u
엔 토손

68
  • 단일 로컬 패키지를 업데이트하려면

    1. 먼저 오래된 패키지를 찾으십시오.

      npm outdated

    2. 그런 다음 수동으로 원하는 패키지를 다음과 같이 업데이트하십시오.

      npm update --save package_name

이렇게하면 로컬 package.json 파일 을 업데이트 할 필요가 없습니다 .

패키지가 최신 버전으로 업데이트됩니다.

  • package.json파일에 일부 버전을 작성 하고 다음을 수행하는 경우 :

    npm update package_name

    이 경우 package.json파일에 작성한 버전과 관련하여 다음 안정 버전 (원하는)을 얻습니다 .

그리고 npm list (package_name)로컬 패키지의 현재 버전을 찾을 수 있습니다.


14

일부 종속성 매니페스트 파일의 취약성을 업데이트하거나 수정하기위한 NPM 명령

  • 아래 명령을 사용하여 노드 모듈의 오래된 취약점을 확인하십시오.

    npm audit

  • 취약점이 발견되면 아래 명령을 사용하여 모든 문제를 해결하십시오.

    npm audit fix

  • 그것이 효과가 없다면 시도해보십시오.

    npm audit fix -f이 명령은 거의 모든 취약점을 해결합니다. 일부 의존성 또는 devDependencies는 package-lock.json 파일에 잠겨 있으므로 -f플래그를 사용 하여 강제로 업데이트합니다.

  • 강제 감사 수정을 사용하지 않으려면 package-lock.jsonpackage.json 파일 에서 종속 버전을 변경하여 수동으로 수정할 수 있습니다 . 그런 다음 실행

npm update && npm upgrade



10

오래된 패키지를 확인하고 업데이트 된 패키지를 추가 할 수있는 추가 패키지는 없습니다.

npm install $(npm outdated | cut -d' ' -f 1 | sed '1d' | xargs -I '$' echo '$@latest' | xargs echo)


좋은 물건, 고마워!
drKreso

추가 패키지를 설치하지 않고도이 단계를 자동화하기 위해 모든 쉘 스크립트에 넣을 수 있기 때문에 이는 훌륭한 답변입니다.
Jankapunkt

4

npm 패키지를 설치하는 경우 (전역 또는 로컬로) @version구문을 사용하여 설치할 버전을 정의 하여 특정 버전 을 정의 할 수 있습니다.

다시 말해 :: npm install -g karma@0.9.2 를 수행 하면 0.9.2 만 설치되고 이미 설치되어 있으면 다시 설치되지 않습니다.

충고 한마디로 전 세계 npm 설치를 피하는 것이 좋습니다. 많은 사람들은 종속성이 bin 파일을 정의하면 ./node_modules/.bin/에 설치된다는 것을 인식하지 못합니다. 종종 package.json에 정의 된 설치된 모듈의 로컬 버전을 사용하는 것이 매우 쉽습니다. 실제로 npm 스크립트는 경로에 ./node_modules/.bin을 추가합니다.

예를 들어 다음은 package.json이며, 실행할 때 package.json에 npm install && npm test정의 된 karma 버전을 설치하고 test스크립트를 실행할 때 해당 버전의 karma (node_modules / .bin / karma에 설치됨)를 사용합니다 .

{
 "name": "myApp",
 "main": "app.js",
 "scripts": {
   "test": "karma test/*",
 },
 "dependencies": {...},
 "devDependencies": {
   "karma": "0.9.2"
 }
}

이를 통해 package.json이 사용할 카르마 버전을 정의하고 CI 상자에 해당 구성을 전역 적으로 유지할 필요가 없습니다.


에 무슨 test스크립트? 스크립트로 설치하는 방법에 대한 실마리를 제공해 주시겠습니까?
iLemming

1
package.json을보십시오. "scripts"속성 아래에서 입력 할 때 실행할 명령 인 값인 "test"라는 다른 속성을 정의 할 수 있습니다 npm test. npm 문서는 여기에 꽤 좋습니다 : npmjs.org/doc/scripts.html
addisonj

4

현재로 npm@5.0.0+ 당신이 간단하게 할 수 있습니다 :

npm update <package name>

파일 이 자동으로 업데이트 package.json됩니다. 최신 버전을 수동으로 업데이트 한 다음 사용할 필요가 없습니다npm update <package name>

당신은 여전히 ​​사용하여 이전 동작을 얻을 수 있습니다

npm update --no-save

( 참조 )


1

하나의 패키지 만 업데이트하려면 NCU를 설치 한 다음 해당 패키지에 대해서만 NCU를 실행하십시오. 이것은 실제 최신 버전과 충돌합니다.

npm install -g npm-check-updates

ncu -f your-intended-package-name -u

6
낮은 품질의 게시물, 더 나은 설명이 도움이 될 것입니다.
linuxfan에 따르면 Reinstate Monica는
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.