npm & node.js
Javascript Runtime environment and Javascript Engine
Javascript는 코드를 한 줄씩 읽어서 바로 실행하는 방식인 인터프리터 언어입니다. 그러나 모던 Javascript 엔진은 JIT(Just In Time) 컴파일러를 통해 성능을 크게 향상시켰습니다. Javascript코드를 실행하기 위해서는 Javascript Runtime environment와 Javascript Engine이 필요합니다.
아래는 이 둘의 차이점의 예시입니다.
음악을 연주하는 로봇- JS code는 악보다- JS engine은 악보를 이해하고 연주할 수 있는 로봇이다.- JS runtime은 음악을 연주하는데 사용되는 악기이다.불을 끄는 로봇- JS code는 불을 끄라는 지시이다- JS engine은 지시를 이해하고 행동하는 로봇이다- JS runtime은 워터건과 소방차이다그렇다면,- JS code는 코드다.- JS engine은 코드를 이해하고 실행한다.- JS runtime은 utility library를 제공한다.
Javascript Engine은 코드를 파싱하고 실행 가능한 명령으로 컴파일하고,
Javascript Runtime은 외부와 상호작용을 할 수 있도록 일부 객체를 제공하는 역할을 합니다.
JS Runtime
- Javascript가 실행되는 환경
- JS Runtime 종류
- 브라우저 : DOM API, Fetch API.. 즉 Web API, 저장소를 제공 (Chrome, FireFox, Safari…)
- 서버 환경 : 파일 시스템 엑세스, 네트워크 엑세스, 콘솔 등 제공 (NodeJS, Deno)
- 데스크탑 환경 : GUI API, 파일 시스템 엑세스, 네트워크 엑세스, 콘솔 등 제공 (Electron)
- 모바일 환경 : (Native Script, React Native..)
(이벤트 루프는 런타임 환경에서 구현됩니다.)
JS Engine
- 자바스크립트 앤진은 소스 코드를 기계어로 해석하고 해석된 결과를 CPU에서 실행됩니다.
- 자바스크립트 엔진은 environment내 에서 실행됩니다.
- V8(Chrome), SpiderMonkey(Firefox), Charkra(Microsoft)
NodeJS
- Javascript Runtime Environment
- V8 엔진을 Javascript Engine으로 사용
- Google이 V8 Javascript 엔진을 개발하면서 2009년에 라이언 달(Lian Dahl)이 V8 엔진을 기반으로 한 자바스크립트 런타임 환경을 만들기로 함
npm
- npm은 nodejs를 위한 패키지 매니저이다.
- npm(Node Package Manager)은 Node.js 생태계의 일부로 2010년에 처음 등장하였다. 패키지 관리의 복잡성을 해결하기 위해 만들어졌다.
- npm은 모듈 설치와 의존성 관리를 자동화하여 개발자들이 더 쉽게 Node.js 어플리케이션을 구축하고 유지보수할 수 있도록 만들었다.
- yarn과 pnpm은 npm cli의 대체제이다.
- npm은 website, CLI(Command Line Interface), registry로 구성되어 있다.
- npm은 public registry를 default로 사용한다.
- npx란 패키지 다운을 받지 않아도 패키지를 실행할 수 있는 것
- npm은 node만 설치되어 있으면 사용이 가능하다.
Yarn (Yarn1.x)
- 캐시된 패키지는 npm보다 빠르다는 장점이 있다
- 대부분의 npm 패키지 및 스트립트와 호환된다
- 중복된 패키지가 많을 수록 디스크 사용량이 많아진다
Yarn Berry (Yarn 2.x)
- PnP(Plug’n Play) : node_modules를 제거하고 패키지를 효율적으로 관리하는 새로운 방식을 도입하여 디스크 사용량을 획기적으로 줄이고, 설치 속도를 높였다.
- 모노레포 관리 기능이 강화되었다
- Zero-installs : 프로젝트에 필요한 모든 종속성을 저장소에 커밋하여, 새로운 환경에서 종속성을 다시 설치할 필요가 없다
- 기능이 향상되었다.
pnpm (Performant npm)
- 대규모 프로젝트와 모노레포에 적합