package.json (NPM)에 나열된 모든 종속성을 제거하려면 어떻게합니까?


107

내 응용 프로그램 루트에 package.json 파일이 정의되어 있고 실행 npm install -g하면 package.json, globablly에 정의 된 모든 종속성이 설치됩니다.

그러나 이것은 반대로 작동하지 않는 것 같습니다.

npm uninstall -g내 응용 프로그램 루트에서 수행 하면 오류가 발생하여 패키지 이름을 전달합니다.

내가 설치 한 동일한 패키지도 제거해야하지 않습니까?

내가 뭘 잘못하고 있니?


1
참고로 npm -g를 사용하지 않는 이유. peterlyons.com/problog/2012/09/...
피터 리용

1
프로젝트에 모듈을 사용하려면 로컬에 설치해야합니다. 모듈을 전역으로 설치하면 예를 들어 expressjs 및 express (1)와 같이 터미널에 더 많은 명령 만 제공됩니다.
warchimede

@sgwilly 당신은 node_modules를 전역 적으로 사용해야하는 것에 대해 틀 렸습니다. 문서에서도 그렇게 말합니다.- nodejs.org / api/ modules.html#modules_all_together -require () 함수는 다양한 위치에서 보이는 점에서 '스마트'합니다. 시도하고 글로벌 node_modules을 포함한 모듈에 대한 경로를 해결하기 위해
qodeninja

좀 더 구체적이어야했습니다. require ()가 전역 적으로 설치된 모듈을 찾을만큼 똑똑하다는 것은 사실입니다. 모든 프로젝트가 해당 모듈의 동일한 버전에 의존하면 작동합니다. 그러나 종속성을 전역 적으로 만 관리하는 경우 다른 모듈 버전에 의존하는 프로젝트를 유지하는 데 어려움을 겪을 수 있습니다. 그렇기 때문에 항상 로컬로 모듈을 설치하고 편리한 실행 가능 명령에 액세스하려는 경우에만 전역 적으로 설치하는 것이 가장 좋습니다.
warchimede

@sgwilly-여기에서 의견을 공유해 주셔서 감사합니다.이 프로젝트는 특히 배포 가능하므로 아무것도 업데이트하지 않아야합니다. 실제로 업데이트는 RPM (RPM이 아닌 NPM)을 통해 발생하고 실제 node_modules는 축소됩니다. 난 단지 rpm이 (내 개발 환경에서) 설치를 끝내는 시스템을 신속하게 정리할 방법이 필요했습니다
qodeninja

답변:


167

Bash를 사용하는 경우 package.json 파일이있는 폴더로 전환하고 다음을 실행하십시오.

for package in `ls node_modules`; do npm uninstall $package; done;

전역으로 설치된 패키지의 경우 %appdata%/npm폴더 로 전환하고 (Windows의 경우) 동일한 명령을 실행합니다.

편집 :이 명령은 npm 3.3.6 (노드 5.0)에서 중단됩니다. 이제 .bashrc 파일에서 npm_uninstall_all에 매핑 한 다음 Bash 명령을 사용하고 있습니다.

npm uninstall `ls -1 node_modules | tr '/\n' ' '`

추가 보너스? 훨씬 빠릅니다!

https://github.com/npm/npm/issues/10187


1
"전역 적으로 모든 npm 모듈을 제거하는 명령?"에 대한 답변과 똑같은 명령을 게시했습니다. 그 상황과이 상황 모두에서 이것이 어떻게 적절한 일이 될 수 있습니까?
아무도

@AndrewMedico 어떻게 적절하지 않습니까? package.json 파일에 설치된 패키지는 node_modules 폴더에 설치됩니다. 이 명령은 모든 하위 폴더를 node_modules 폴더로 가져와 npm uninstall <package>각 폴더에 대해 실행 합니다. 내가 직접했고 훌륭하게 작동합니다!
jedmao 2014-06-24

2
@UgoRobain 좋은 질문입니다. 결과적으로 일부 종속성은 정말 깊어집니다. NTFS 파일 시스템 (Windows)에서는 적어도 경로 이름이 어떤 종류의 제한보다 긴 디렉터리를 제거하는 데 문제가있어 제거 할 수없는 이러한 가상 디렉터리를 남겨 둡니다. 다행히도이 npm uninstall트릭이 유용한 이유입니다.
jedmao

7
다음은 powershell을 사용하여 수행 한 작업입니다.foreach($package in ls node_modules){npm uninstall $package}
JustMaier

1
Windows에서 작동하지 않는 것 같습니다. tr is not recognized
Overdrivr

78

이것은 나를 위해 일했습니다.

명령 프롬프트 또는 gitbash를 프로젝트의 node_modules 폴더에 넣고 다음을 실행하십시오.

npm uninstall *

해당 프로젝트의 모든 로컬 패키지를 제거했습니다.


이렇게하면 글로벌 설치도 제거되지 않습니까?
shinzou

@shinzou 그것은 나를 위해 글로벌 설치를 제거하지 않았습니다.
Taylor Edmiston

1
Mac 10.13.5에서는 아래와 같이 많은 오류가 발생합니다. "> heapdump@0.3.9 install / Users / vikramanna / node_modules / heapdump> node-gyp rebuild CXX (target) Release / obj.target / addon / src / heapdump. o ../src/heapdump.cc:17 : ../src/compat-inl.h:300:19에 포함 된 파일에서 오류 : 'v8 :: Isolate'에 'GetCpuProfiler'라는 이름의 멤버가 없습니다. GetCpuProfiler ()-> StartProfiling (title, record_samples); "
vikramvi

35

Windows의 경우 node_modules dir로 이동하여 powershell에서 실행하십시오.

npm uninstall (Get-ChildItem).Name 

저에게는 "명령 줄이 너무 깁니다."라는 오류가 발생합니다.
Daniel

29

최근에 다음과 같이 모든 개발 종속성을 제거 할 수있는 노드 명령을 찾았습니다.

npm prune --production

앞서 언급했듯이이 명령은 개발 종속성 패키지 만 제거합니다. 적어도 수동으로 할 필요가 없었습니다.


8

Windows 사용자를위한 팁 : node_modules상위 디렉토리 내에서이 PowerShell 명령을 실행하십시오 .

ls .\node_modules | % {npm uninstall $_}

6
// forcibly remove and reinstall all package dependencies
ren package.json package.json-bak
echo {} > package.json
npm prune
del package.json
ren package.json-bak package.json
npm i

이것은 본질적으로 가짜의 빈 package.json을 만들고 npm prunenode_modules의 모든 것을 제거하도록 호출 하고 원래 package.json을 복원하고 모든 것을 다시 설치합니다.

다른 솔루션 중 일부는 더 우아 할 수 있지만 이것이 더 빠르고 철저하다고 생각합니다. 다른 스레드에서 사람들이 node_modules 디렉토리를 삭제하는 것을 제안하는 것을 보았지만 적어도 Windows의 경우 bin 디렉토리가 누락되어 나중에 npm이 질식합니다. 아마도 Linux에서는 제대로 복원되지만 Windows는 복원되지 않습니다.


1
제 경우에는-기존 package.json이 필요하지 않았습니다 (npm 스크립트가 실행 된 후 CI에서 스크립트를 실행했기 때문입니다 ..) 그래서 방금 "echo {}> package.json & npm prune"
Rikki

5

당신이에서 제거 패키지를 원한다면 사실, 그렇게 할 수있는 옵션이 없습니다 package.json간단하게 할 npm ls같은 디렉토리에 package.json의존하고 사용 npm uninstall <name>또는 npm rm <name>제거 할 패키지.


8
개별적으로 제거하는 방법을 알고 있습니다. npm 설치가 작동하는 것과 동일한 방식으로 package.json 파일에 대해 실행하는 명령이 있다면 더 이해가 될 것입니다.
qodeninja

아니 우리는 모든 모듈을 손으로 제거하고 싶지 않습니다.
shinzou

1
  1. package.json 에서 원치 않는 종속성 제거
  2. npm i

" npm i"는 누락 된 deps를 설치할뿐만 아니라 package.json과 일치하도록 node_modules를 업데이트합니다.


1

( 모든 것을 읽을 때까지이 단계를 복제하지 마십시오. )

나에게 언급 된 모든 솔루션이 작동하지 않았습니다. 김 나는에 가서 /usr/lib거기 실행

for package in `ls node_modules`; do sudo npm uninstall $package; done;

그러나 그것은 또한 제거했습니다 npm 패키지와 패키지의 절반 만 했습니다 (문자 n에 도달 할 때까지).

그래서 노드 가이드에 따라 다시 노드 설치를 시도했습니다.

# Using Ubuntu
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install -y nodejs

하지만 설치되지 않았습니다. npm 다시 .

그래서 전체 노드를 다시 설치하기로 결정했습니다. sudo apt-get remove nodejs 다시 설치하고 위의 가이드에 따라 다시 설치 .

이제 NPM이 다시 작동하지만 글로벌 모듈은 여전히 ​​있습니다. 그래서 나는 디렉토리의 내용을 확인했고 /usr/lib/node_modules여기서 중요한 것은 npm. 그래서 위의 명령을 편집하여npm

for package in $(ls node_modules); do if [ "$package" != "npm" ]; then sudo npm uninstall $package; fi; done;

접두사가없는 모든 모듈을 제거했습니다 @. 그래서 하위 디렉토리에 대한 루프를 확장했습니다.

for package in $(ls node_modules); do if [  ${package:0:1} = \@ ]; then 
        for innerPackage in $(ls node_modules/${package}); do
                sudo npm uninstall "$package/$innerPackage";
        done;
fi; done;

/usr/lib/node_modules지금은 npm링크 된 패키지 만 포함 합니다.


0

이를 위해 루프를 실행할 필요가 없습니다.

단 하나의 명령을 사용하여 모든 node_modules를 삭제할 수 있습니다.

npm uninstall `ls -1 node_modules | tr '/\n' ' '`


0

VIKAS KOHLIjedmao를 피기 백 하면이 작업을 수행 할 수 있습니다.

단일 라인 버전 :

npm uninstall `ls -1 node_modules | grep -v ^@ | tr '/\n' ' '` `find node_modules/@* -type d -depth 1 2>/dev/null | cut -d/ -f2-3 | tr '\n' ' '`

여러 줄 버전 :

npm uninstall \
`ls -1 node_modules | grep -v ^@ | tr '/\n' ' '` \
`find node_modules/@* -type d -depth 1 2>/dev/null | cut -d/ -f2-3 | tr '\n' ' '`

0

또 다른 간단한 옵션은 node_modules 및 package-lock.json을 삭제하는 것입니다.

rm -rf node_modules
rm -rf package-lock.json

그런 다음 npm 패키지를 다시 설치할 수 있습니다.

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