npm
npm원본 작성자 | 아이작 Z.슐루터 |
---|---|
개발자 | npm, Inc.(마이크로소프트 자회사 깃허브의 [1]자회사) |
초기 출시 | 2010년 1월 12일; [2] | 전 (
안정적 방출 | 2023년 7월 19일 / 9.8.1[3] |
저장소 | |
작성 위치 | 자바스크립트 |
플랫폼 | 크로스 플랫폼 |
유형 | 패키지 관리자 |
면허증. | 아티스틱 라이선스 2.0 |
웹사이트 | www |
npm은[a] npm, Inc.에서 관리하는 JavaScript 프로그래밍 언어용 패키지 관리자이며, npm은 JavaScript 런타임 환경 Node.js의 기본 패키지 관리자입니다.npm이라고도 하는 명령줄 클라이언트와 npm 레지스트리라고 하는 공용 및 유료 개인 패키지의 온라인 데이터베이스로 구성됩니다.레지스트리는 클라이언트를 통해 액세스되며 사용 가능한 패키지는 npm 웹 사이트를 통해 검색할 수 있습니다.패키지 관리자와 레지스트리는 npm, Inc.에서 관리합니다.
어원
npm
는 공식적으로 "'npm은 [6]약어가 아니다'의 의미 있는 바크로니믹 약어"입니다.그러나, 초기 커밋은npm
이를 "노드 패키지 관리자"[7]라고 불렀습니다.명칭의 확장은 [8]2014년에 변경되었습니다.
역사
npm은 전적으로 자바스크립트로 작성되었으며 Isaac Z에 의해 개발되었습니다.Schlueter는 PEAR(PHP) 및 CPAN(Perl)[9]과 같은 다른 유사한 프로젝트에서 영감을 받아 "모듈 패키징이 끔찍하게 수행되는 것을 보았다"는 결과를 얻었습니다.
레프트패드 사건
2016년 3월, npm은 다음과 같은 패키지 이후 언론의[10] 관심을 끌었습니다.left-pad
많은 인기 있는 자바스크립트 패키지가 의존했던 것은 독학 소프트웨어 엔지니어인 아제르 코쿨루와 Kik [11][12]사이의 이름 지정 분쟁의 결과로 출판되지 않았습니다.패키지가 3시간 [13]후에 다시 게시되었지만 광범위한 혼란을 야기하여 npm은 향후 [14]유사한 이벤트를 방지하기 위해 게시 해제에 대한 정책을 변경했습니다.
기타 파손
2018년 2월 버전 5.7.0에서 실행 중인 문제가 발견되었습니다.sudo npm
Linux 시스템에서는 시스템 파일의 소유권이 변경되어 운영 [15]체제가 영구적으로 손상됩니다.
2018년 7월, 인기 관리자의 npm 자격 증명.eslint-scope
패키지가 손상되어 악의적인 릴리스가 발생했습니다.eslint-scope
버전 3.7.2악의적인 코드가 실행 중인 컴퓨터의 npm 자격 증명을 복사했습니다.eslint-scope
공격자에게 업로드했습니다.[16]
2018년 11월에 악성 패키지가 인기 패키지 버전 3.3.6의 종속성으로 추가된 것이 발견되었습니다.event-stream
호출된 악의적인 패키지flatmap-stream
특정 응용 프로그램에서 비트코인을 훔치는 암호화된 페이로드가 포함되어 있습니다.npm 관리자가 문제의 [17][18]패키지를 제거했습니다.
2020년 4월에, 작은 소포는 다음과 같이 불렀습니다.is-promise
많은 크고 중요한 [19]애플리케이션의 종속성으로 인해 전 세계적으로 서버리스 애플리케이션과 배포가 중단되었습니다.
2022년 1월, 인기 패키지의 관리자colors
pushed: 가비지 텍스트를 무한 루프로 인쇄하는 변경 사항.관리자는 또한 저장소에서 다른 인기 있는 패키지를 삭제했습니다.faker
그리고 npm에 패키지를 넣고 "Aaron Swartz에게 [20]실제로 무슨 일이 일어났습니까?"라고 적힌 README로 대체했습니다.
2022년 3월, 개발자 브랜든 노자키 밀러는 패키지 버전을 출시했습니다.node-ipc
러시아의 우크라이나 침공에 항의하여 벨라루스 및 러시아 IP 주소를 가진 사용자의 파일을 삭제하는 악성 코드가 포함되어 있습니다.다음을 사용하는 Vue.jsnode-ipc
종속성으로서, 는 종속성을 안전한 버전에 고정하지 않았습니다. 즉, 종속성을 최신 [21][22]패키지로 가져온 경우 Vue.js의 일부 사용자가 악의적인 패키지의 영향을 받게 됩니다.영향을 받는 종속성은 Unity Hub 버전 3.1에도 잠시 있었지만, 문제를 제거하기 위해 같은 날 핫픽스가 릴리스되었습니다.[23]
묘사
npm은 Node.js [24]설치 관리자에 권장되는 기능으로 포함되어 있습니다.npm은 원격 레지스트리와 상호 작용하는 명령줄 클라이언트로 구성됩니다.사용자는 [25]레지스트리에서 사용할 수 있는 JavaScript 모듈을 사용하고 배포할 수 있습니다.레지스트리의 패키지가 ESM(EsmaScript Module) 또는 공통에 있음JSON [26]형식의 메타데이터 파일을 포함합니다.메인 npm [27]레지스트리에서 130만 개 이상의 패키지를 사용할 수 있습니다.레지스트리에는 제출 확인 프로세스가 없습니다. 즉, 발견된 패키지는 잠재적으로 품질이 낮거나 안전하지 [26]않거나 악의적일 수 있습니다.대신, npm은 사용자 보고서를 사용하여 패키지가 낮은 품질,[28] 안전하지 않거나 악의적으로 정책을 위반하는 경우 패키지를 다운로드합니다.npm은 개발자가 [29]패키지의 품질을 판단하는 데 도움이 되도록 다운로드 수와 종속 패키지 수를 포함한 통계를 제공합니다.
npm 버전 6에서는 개발자가 설치된 [30]패키지의 보안 취약성을 식별하고 수정할 수 있도록 감사 기능이 도입되었습니다.보안 취약성의 소스는 Node Security Platform(NSP)[31]에서 발견된 보고서에서 가져온 것으로 npm이 NSP를 인수한 이후 npm과 통합되었습니다.
사용.
npm은 특정 프로젝트의 로컬 종속성인 패키지와 전역에 설치된 JavaScript 도구를 [32]관리할 수 있습니다.로컬 프로젝트의 종속성 관리자로 사용될 때, npm은 하나의 명령으로 프로젝트의 모든 종속성을 설치할 수 있습니다.package.json
파일.[33] 에서.package.json
각 종속성은 의미론적 버전 체계를 사용하여 유효한 버전 범위를 지정할 수 있으므로 개발자가 패키지를 자동으로 업데이트하는 동시에 원하지 않는 변경 [34]사항을 방지할 수 있습니다.npm은 또한 개발자들이 패키지에 특정 [35]버전을 태그할 수 있는 버전 검색 도구를 제공합니다.npm은 또한 다음을 제공합니다.package-lock.json
[36] 시맨틱 버전을 평가한 후 프로젝트에서 사용한 정확한 버전의 엔트리가 있는 파일package.json
.
대안
모듈식 자바스크립트를 설치하기 위한 npm에 대한 수많은 오픈 소스 대안이 있습니다.ied
,pnpm
,npmd
그리고 [37]2016년 10월 페이스북에 의해 마지막으로 공개된 얀.이들은 모두 공용 npm 레지스트리와 호환되며 기본적으로 사용하지만, 일반적으로 npm [38]클라이언트와 비교하여 성능 및 결정론을 개선하는 데 중점을 둔 다양한 클라이언트 측 경험을 제공합니다.
레지스트리
내부적으로 npm은 NoSQL Couch DB를 사용하여 공개적으로 사용 가능한 데이터를 [39]관리합니다.
참고 항목
레퍼런스
- ^ "Microsoft-owned GitHub to acquire JavaScript package manager Npm". GeekWire. 17 March 2020.
- ^ "Earliest releases of npm". GitHub. Retrieved 5 January 2019.
- ^ 오류: 참조를 제대로 표시할 수 없습니다.자세한 내용은 설명서를 참조하십시오.
- ^ "Initial drop. Ugly, sketchy, and not even yet quite a "work in progr… · npm/cli@4626dfa". GitHub.
- ^ "npm". npm. Retrieved 15 February 2023.
- ^ Clarke, Darcy (12 February 2021). "npm - a JavaScript package manager". GitHub. npm. Retrieved 5 October 2021.
- ^ "NPM - a JavaScript package manager". GitHub. 12 February 2022.
- ^ "NPM is a nice JavaScript package manager · NPM/Cli@cbb890e". GitHub.
- ^ Schlueter, Isaac Z. (25 March 2013). "Forget CommonJS. It's dead. **We are server side JavaScript.**". GitHub.
- ^ Yegulalp, Serdar (23 March 2016). "How one yanked JavaScript package wreaked havoc". InfoWorld. Retrieved 22 July 2016.
- ^ Williams, Chris. "How one developer just broke Node, Babel and thousands of projects in 11 lines of JavaScript". The Register. Retrieved 17 April 2016.
- ^ Collins, Keith (27 March 2016). "How one programmer broke the internet by deleting a tiny piece of code". Quartz. Retrieved 23 December 2020.
- ^ "kik, left-pad, and npm". Retrieved 9 May 2017.
- ^ "changes to unpublish policy". npm Blog (Archive). Retrieved 23 January 2022.
- ^ "Critical Linux filesystem permissions are being changed by latest version". GitHub. Retrieved 25 February 2018.
- ^ "Virus in eslint-scope? · Issue #39 · eslint/eslint-scope". GitHub.
- ^ "Details about the event-stream incident". The npm Blog. Retrieved 28 November 2018.
- ^ "Backdoored dependency? flatmap-stream-0.1.1 and flatmap-stream-0.1.2". Github. Retrieved 28 November 2018.
- ^ "ERR_INVALID_PACKAGE_TARGET". Github. Retrieved 22 August 2020.
- ^ "Dev corrupts NPM libs 'colors' and 'faker' breaking thousands of apps". Bleeping Computer. Retrieved 9 January 2022.
- ^ "BIG sabotage: Famous npm package deletes files to protest Ukraine war". Bleeping Computer. Retrieved 17 March 2022.
- ^ Juha Saarinen (17 March 2022). "'Protestware' npm package dependency labelled supply-chain attack". IT News. nextmedia.
- ^ Proven, Liam (18 March 2022). "JavaScript library updated to wipe files from Russian computers". The Register. Situation Publishing. Archived from the original on 18 March 2022. Retrieved 18 March 2022.
- ^ Dierx, Peter (30 March 2016). "A Beginner's Guide to npm – the Node Package Manager". sitepoint. Retrieved 22 July 2016.
- ^ Ampersand.js. "Ampersand.js – Learn". ampersandjs.com. Retrieved 22 July 2016.
- ^ a b Ojamaa, Andres; Duuna, Karl (2012). "Assessing the Security of Node.js Platform". 2012 International Conference for Internet Technology and Secured Transactions. IEEE. ISBN 978-1-4673-5325-0. Retrieved 22 July 2016.
- ^ Nassri, Ahmad (14 April 2020). "So long, and thanks for all the packages!". The npm Blog. Retrieved 6 January 2021.
{{cite web}}
CS1 유지보수: url-status(링크) - ^ "npm Code of Conduct: acceptable package content". Retrieved 9 May 2017.
- ^ Vorbach, Paul. "npm-stat: download statistics for NPM packages". npm-stat.com.
- ^ npm. "'npm audit': identify and fix insecure dependencies". The npm Blog. Retrieved 14 August 2018.
- ^ npm. "The Node Security Platform service is shutting down 9/30". The npm Blog. Retrieved 14 August 2018.
- ^ Ellingwood, Justin. "How To Use npm to Manage Node.js Packages on a Linux Server". DigitalOcean. Retrieved 22 October 2016.
- ^ "npm-install". docs.npmjs. Retrieved 22 October 2016.
- ^ "semver". docs.npmjs. Archived from the original on 3 December 2016. Retrieved 22 October 2016.
- ^ "npm-version". docs.npm. Retrieved 29 October 2016.
- ^ Koirala, Shivprasad (21 August 2017). "What is the need of package-lock.json in Node?". codeproject.
- ^ "Hello, Yarn!". The npm Blog. 11 October 2016. Retrieved 17 December 2016.
- ^ Katz, Yehuda (11 October 2016). "Why I'm working on Yarn". Retrieved 17 December 2016.
- ^ "registry npm Docs". docs.npmjs.com. Retrieved 10 May 2021.