红宝书第三十一讲:通俗易懂的包管理器指南:npm 与 Yarn


红宝书第三十一讲:通俗易懂的包管理器指南:npm 与 Yarn

资料取自《JavaScript高级程序设计(第5版)》

查看总目录:红宝书学习大纲


一、基础概念

包管理器 :帮你自动下载和管理第三方代码库(如React、Lodash)的工具 [1](#1)

核心作用:

  1. 安装依赖:从公共仓库获取代码包
  2. 版本管理:明确指定项目依赖的版本
  3. 脚本自动化:快速执行构建/测试任务

二、npm(Node Package Manager)

Node.js 官方默认工具,适合中小型项目 [1](#1)[2](#2)

1. 基础使用步骤

常用命令

bash 复制代码
# 初始化项目(生成 package.json)
npm init -y 

# 安装生产依赖(会记录在 dependencies)
npm install lodash

# 安装开发依赖(记录在 devDependencies)
npm install eslint --save-dev
2. 依赖管理特点

使用 嵌套树结构 (每个子依赖独立装自己的版本)[2](#2)

举例:你的项目依赖A和B,而A依赖D@1.0,B依赖D@2.0

→ 生成 node_modules 结构:

复制代码
node_modules/
├── A/
│   └── node_modules/
│       └── D@1.0/
└── B/
    └── node_modules/
        └── D@2.0/

三、Yarn(由 Facebook 开发)

专注于 更快的安装速度和安全改进 ,适合大型项目 [3](#3)

1. 核心优化
  • 离线缓存 :重复安装直接读取本地缓存 [3](#3)
  • 锁定版本 :生成 yarn.lock 文件严格锁定依赖版本
  • 并行下载:比npm更快下载包

安装方式

bash 复制代码
# 全局安装Yarn(需先安装Node.js)
npm install -g yarn

# 初始化项目(生成 package.json)
yarn init -y

# 安装包
yarn add axios
2. 依赖结构扁平化

相同示例(依赖A和B,A需要D@1.0,B需要D@2.0)

→ 尝试共享依赖但可能冲突时分开:

复制代码
node_modules/
├── A/
├── B/
├── D@1.0/  # 为A安装的版本
└── D@2.0/  # 为B安装的版本

四、如何选择?
维度 npm Yarn
安装速度 较慢 快(并行下载 + 缓存)^[3](#维度 npm Yarn 安装速度 较慢 快(并行下载 + 缓存)3 版本锁定 package-lock.json(自动) yarn.lock(更严格)3 适用场景 小型项目/简单脚本 大型项目/团队协作)^
版本锁定 package-lock.json(自动) yarn.lock(更严格)^[3](#维度 npm Yarn 安装速度 较慢 快(并行下载 + 缓存)3 版本锁定 package-lock.json(自动) yarn.lock(更严格)3 适用场景 小型项目/简单脚本 大型项目/团队协作)^
适用场景 小型项目/简单脚本 大型项目/团队协作

五、实战示例
场景:创建一个使用Lodash的项目

使用npm

bash 复制代码
# 1. 初始化项目
npm init -y

# 2. 安装Lodash
npm install lodash

# 3. 在代码中使用
// index.js
const _ = require('lodash');
console.log(_.sum([1, 2, 3]));  // 输出:6

使用Yarn

bash 复制代码
# 1. 初始化项目(需全局安装Yarn)
yarn init -y

# 2. 安装Lodash
yarn add lodash

# 3. 运行脚本
node index.js

目录:总目录

上篇文章:红宝书第三十讲:通俗易懂的JavaScript调试指南
下篇文章:红宝书第三十二讲:零基础学会模块打包器:Webpack、Parcel、Rollup

脚注


  1. 《JavaScript高级程序设计(第5版)》说明npm是Node.js的默认包管理器 ↩︎ ↩︎

  2. 《JavaScript高级程序设计(第5版)》描述npm使用嵌套依赖树安装包 ↩︎ ↩︎

  3. 《JavaScript高级程序设计(第5版)》指出Yarn具备缓存和严格的版本锁定 ↩︎ ↩︎ ↩︎ ↩︎

相关推荐
551只玄猫1 小时前
【数学建模 matlab 实验报告12】聚类分析和判别分析
开发语言·数学建模·matlab·课程设计·聚类·实验报告
小陈工3 小时前
Python Web开发入门(十七):Vue.js与Python后端集成——让前后端真正“握手言和“
开发语言·前端·javascript·数据库·vue.js·人工智能·python
H Journey3 小时前
C++之 CMake、CMakeLists.txt、Makefile
开发语言·c++·makefile·cmake
研究点啥好呢7 小时前
Github热门项目推荐 | 创建你的像素风格!
c++·python·node.js·github·开源软件
AI成长日志7 小时前
【Agentic RL】1.1 什么是Agentic RL:从传统RL到智能体学习
人工智能·学习·算法
xiaotao1317 小时前
第九章:Vite API 参考手册
前端·vite·前端打包
午安~婉7 小时前
Electron桌面应用聊天(续)
前端·javascript·electron
lly2024067 小时前
C 标准库 - `<stdio.h>`
开发语言
沫璃染墨7 小时前
C++ string 从入门到精通:构造、迭代器、容量接口全解析
c语言·开发语言·c++
jwn9997 小时前
Laravel6.x核心特性全解析
开发语言·php·laravel