包管理生态
JavaScript 包管理器简史
| 时期 | 工具 | 特点 |
|---|---|---|
| 2010 | npm v1 | 嵌套 node_modules,路径爆炸 |
| 2014 | npm v3 | 扁平化,但幽灵依赖 |
| 2016 | Yarn | 锁文件、并行安装、离线缓存 |
| 2017 | npm v5 | 借鉴 Yarn,加入 package-lock.json |
| 2019 | pnpm | 硬链接 + 内容寻址存储,磁盘省 50%+ |
| 2020 | Yarn 2/3 | Plug'n'Play,零 node_modules |
核心区别:
- npm:最早,生态最大,v5 后体验改善
- Yarn:锁文件 + 确定性安装 + workspace 支持好
- pnpm:严格的依赖隔离(不会幽灵依赖),磁盘最省,monorepo 友好
npx vs npm vs cnpm vs pnpm
- npm:包管理器,安装和管理依赖
- npx:npm 自带的包执行器,直接运行未全局安装的包
- cnpm:淘宝镜像的 npm 客户端,安装快但锁文件可能不一致,不推荐新项目使用
- pnpm:高性能、节省磁盘、严格依赖隔离,推荐
NRM — NPM 镜像源管理
bash
npx nrm use taobao # 淘宝源已迁移至 npmmirror.com,旧 URL 已废弃
npx nrm test # 测速
npx nrm ls # 列出所有源一键切换 npm 源。注意淘宝源 URL 已从 registry.npm.taobao.org 迁移至 registry.npmmirror.com,旧版 nrm 默认列表可能未更新,需手动添加。。
npm 本地包引用
需要维护私有包或本地改动时:
- npm link — 本地开发调试
- file:../my-package — 在 package.json 中直接引用本地路径
- npm pack — 打 tgz 包后安装
concurrently — 本地开发并行执行
json
{
"scripts": {
"dev": "concurrently \"npm run serve\" \"npm run electron\""
}
}配合 wait-on 可按序启动:
json
"dev": "concurrently \"npm run electron\" \"wait-on http://localhost:8080 && npm run open\""