Fast, disk space efficient package manager | pnpm

Node.js

# Node.js 버전 확인
➜ node -v
v20.9.0

# v20.9.0 가 설치되어 있지 않다면
➜ nvm install 20.9.0

# v20.9.0 를 사용하고 있지 않다면
➜ nvm use 20.9.0

# Node.js 버전 다시 확인
➜ node -v
v20.9.0

npm

# npm 버전 확인
➜ npm -v
10.2.1

# 최신 버전 npm 으로 업그레이드 
➜ npm i [email protected] -g

# npm 버전 다시 확인
➜ npm -v
10.2.1

pnpm

# pnpm 설치 확인 및 버전 확인
➜ pnpm -v
8.10.0

# 최신 버전 pnpm 으로 업그레이드 
➜ npm i [email protected] -g

# pnpm 설치 다시 확인 및 버전 다시 확인
➜ pnpm -v
8.10.0

Create Workspaces Root

➜ mkdir pnpm-workspaces-example

➜ cd pnpm-workspaces-example

➜ corepack enable

➜ pnpm init

➜ corepack use [email protected]

➜ cat package.json

➜ yarn
{
  "name": "pnpm-workspaces-example",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \\"Error: no test specified\\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "packageManager": "[email protected]+sha1.77d568bacf41eeefd6695a7087c1282433955b5c"
}

Create Workspace

➜ mkdir packages packages/a packages/b

➜ cd package/a

➜ pnpm init

➜ cd ../b

➜ pnpm init

➜ cd ...

➜ code .
# pnpm-workspace.yaml

packages:
  - "packages/*"

특정 workspace 에 외부 의존성 추가

➜ pnpm --filter a add axios

workspace 코드 작성

// pnpm-workspaces-example/package-b/index.js

const axios = require("axios");

module.exports = async function () {
  const response = await axios.get("<https://api.github.com/users>");

  return response.data;
};
// pnpm-workspaces-example/package-a/index.js

const b = require("b");

(async function main() {
  const users = await b();

  console.log(users.map((user) => user.login).join(", "));
})();

workspace 스크립트 실행하기

{
  "name": "a",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "test": "echo \\"Error: no test specified\\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "axios": "^1.6.0"
  }
}