Node.js - Package Manager - pnpm

Doc

Guide

Install

npm i -g pnpm
npm i -g pnpm@latest
pnpm self-update

管理 Node.js 的執行環境

  • pnpm env use –global lts : 安裝並使用 LTS 版本
  • pnpm env use –global {version} : 安裝並使用指定版本
  • pnpm env add –global {version} : 僅安裝指定版本
  • pnpm env remove –global {version} : 移除指定版本
  • pnpm env list : 列舉本地所有版本
  • pnpm env list : 列出線上可用的版本

Workspace - Monorepo

特色

  • 👍 package 使用相同版本 依賴/設定檔/風格
  • ⚠️ package 權限控管需仰賴其他工作流。

配置 root package.json

以下指令產生一個基本的 package.json

pnpm init

在專案中限用 pnpm

⚠️ 但目前 npm hook - preinstall 未如預期運作。

{
  "scripts": {
    "preinstall": "npx only-allow pnpm"
  }
}

配置 pnpm-workspace.yaml

該檔案聲明這是一個 Monorepo 專案。工作區下的 package 會有各自的 package.json,並且執行 pnpm install 時自動安裝所有 package 的相依套件。

packages:
  - 'packages/*'
  • packages 字段列出了工作區包含的 package 位置。

專案基本結構

- Git
  - pnpm-workspace.yaml
  - package.json
  - packages

workspace 指令/參數

  • pnpm add -wD <pkg> : 添加依賴於工作區
  • pnpm remove -wD <pkg> : 移除依賴從工作區
  • pnpm install : 安裝所有依賴
  • pnpm <commnad> : 執行命令
  • pnpm –filter <package_selector> <command> : 執行 package 命令
  • pnpm store prune : 會清理掉不再被專案引用的包
  • pnpm outdated : 檢查過期的 packages
  • pnpm update –latest : 更新所有依賴至最新