
Yarn 包管理器速查指南常用命令、依赖管理与 Workspaces 实战【免费下载链接】reference面向开发者的技术速查清单Cheat Sheets集合整理常见技术、工具与开发流程帮助快速查阅关键信息提高开发效率。项目地址: https://gitcode.com/GitHub_Trending/referen/reference本篇技术指南以仓库中的 Yarn 备忘清单 为主体系统梳理 Yarn 包管理器的常用命令、安装选项、依赖类型分类、Workspaces 工作区与选择性版本解析等核心能力并结合 package.json 备忘清单 与 npm 备忘清单 中的字段定义和命令对照进行纵深讲解。读完本篇你将能够熟练地在日常开发中用 Yarn 完成依赖安装、版本锁定、多包仓库管理与子依赖版本覆盖等任务。入门Yarn 与 npm 命令对比Yarn 与 npm 在功能上有大量一一对应的命令绝大多数 npm 使用习惯可以平滑迁移到 Yarn。下表基于 Yarn 备忘清单 整理列出两套命令的对应关系| npm (v5) | yarn | 说明 | | :- | :- | :- | |npm install|yarn add、yarn| 安装依赖 | |npm init|yarn init| 创建package.json文件 | |npm install gulp --save|yarn add gulp| 安装gulp包 | |npm install gulp --save-dev --save-exact|yarn add gulp --dev --exact| 安装为精确版本的开发依赖 | |npm install -g gulp|yarn global add gulp| 全局安装 | |npm update|yarn upgrade| 升级依赖 | |npm cache clean|yarn cache clean| 清理缓存目录 | |./node_modules/.bin/gulp|yarn run gulp| 运行本地安装的可执行文件 |值得注意的两点差异yarn不带任何参数与yarn install等价会依据package.json一次性安装全部依赖而yarn add pkg是「安装 写入 package.json」的组合操作对应 npm 的npm install pkg --save。npm 侧运行本地二进制文件需要显式书写./node_modules/.bin/xxx而 Yarn 提供yarn run script或yarn script直接执行scripts字段中定义的任务。关于scripts的更多约定如preinstall、postinstall等生命周期钩子可参考 package.json 备忘清单。有关 npm 侧的完整命令细节与.npmrc配置可继续查阅 npm 备忘清单。yarn install按锁定文件精确还原依赖yarn install是 Yarn 中最核心的命令用于根据package.json安装项目所需的全部依赖并可配合大量选项控制安装行为。以下是备忘清单中列出的全部选项及其作用--no-lockfile # 不要读取或生成 yarn.lock 锁定文件 --pure-lockfile # 不要生成 yarn.lock 锁定文件 --frozen-lockfile # 不更新 yarn.lock若需要更新则直接安装失败 --silent # 静默执行不输出日志 --offline # 触发远程请求时以缓存数据代替 --update-checksums # 更新 yarn.lock 中的校验和 --check-files # 检查 node_modules 中已安装的文件是否完整 --flat # 在整个依赖树中只允许一个版本的依赖 --force # 强制重新获取所有包即使它们已在缓存中 --ignore-scripts # 不执行 package.json 中定义的脚本 --modules-folder path # 指定 node_modules 的安装位置 --production[true|false] # 仅安装 dependencies跳过 devDependencies几个高频场景的选项解读CI/CD 环境推荐使用--frozen-lockfile保证每次安装严格按照yarn.lock还原依赖一旦锁定文件需要变更就立即失败从而暴露依赖漂移问题。离线安装--offline配合缓存使用适合网络受限的构建环境缓存会在首次安装时自动填充。生产部署--production等价于--productiontrue只安装dependencies不安装devDependencies从而精简生产环境的依赖体积。强制单版本--flat会强制整个依赖树中同一包只允许一个版本若出现冲突Yarn 会交互式询问并自动在package.json的resolutions字段中写入选择结果——这一点在 package.json 备忘清单 中有明确说明。yarn add安装依赖并写入 package.jsonyarn add pkg会在安装包的同时将其写入package.json的对应依赖分组。根据目标分组不同可以使用以下选项--dev, -D # 安装到 devDependencies开发期依赖生产不安装 --peer, -P # 安装到 peerDependencies对等依赖声明与宿主包的兼容版本 --optional, -O # 安装到 optionalDependencies可选依赖安装失败不阻断流程 --exact, -E # 安装为精确版本不带 ^ / ~ 前缀 --tilde, -T # 安装为同次要版本的最新版本~ 前缀依赖分组的语义结合 package.json 备忘清单 中的字段定义devDependencies仅在开发期需要、生产环境不安装的包如测试框架、构建工具、Lint 工具等对应 package.json.md#devdependencies。peerDependencies声明你的包与宿主项目其他包的版本兼容性例如 React 插件声明其支持的 React 版本范围对应 package.json.md#peerdependencies。optionalDependencies可选用但非必需的包安装失败不会中断整个安装流程对应 package.json.md#optionaldependencies。版本控制选项是日常最常踩坑的点默认情况下yarn add react会写入^18.2.0这类带^前缀的范围版本安装时解析到该范围内的最新版本使用-E, --exact则写入18.2.0精确锁定避免后续yarn install因范围内版本升级而变化使用-T, --tilde则写入~18.2.0锁定到当前次要版本只允许补丁版本升级。语义化版本号的^、~、等范围规则属于 semver 规范的范畴仓库中还有一份独立的 Semver 语义化版本备忘清单 可供交叉查阅。Workspaces从单包走向 MonorepoWorkspaces 是 Yarn 1.0 引入的多包管理能力允许在一个顶级根包中管理本地文件系统中的多个子包实现依赖共享与统一安装。配置方式是在根package.json中添加workspaces字段对应 package.json.md#workspaces{ workspaces: [ packages/* ] }典型的目录结构以 jest 为例jest/ ├─ package.json └─ packages/ ├─ jest-matcher-utils/ │ └─ package.json └─ jest-diff/ └─ package.json当子包之间相互依赖时Yarn 会通过符号链接symlink将node_modules中的包指向本地的packages/*目录而不是重新下载远程副本从而让多个子包在开发时「相互共享」。这也意味着在根目录执行一次yarn install即可为所有工作区子包统一安装依赖各子包公共的依赖会被提升hoist到根级node_modules减少重复安装本地子包的修改即时生效无需反复yarn add本地路径。workspaces字段支持数组形式精确罗列多个子包路径例如[packages/a, packages/b]详细示例同样可见 package.json.md#workspaces。选择性版本解析用 resolutions 覆盖子依赖实际项目中经常会遇到「间接依赖」的版本问题你的直接依赖又依赖了某个有安全漏洞或行为异常的第三方包而你无法直接控制它。Yarn 的选择性版本解析Selective Version Resolutions正是为解决这一问题而生它在package.json的resolutions字段中配置{ resolutions: { **/sass-brunch/node-sass: 4.5.2 } }**/sass-brunch/node-sass表示「任意层级下的 sass-brunch 所依赖的 node-sass」即只覆盖这条特定依赖链上的版本而不是全局强制也可以写成transitive-package-1: 0.0.29这种不带路径前缀的形式表示覆盖所有位置的该包版本详见 package.json.md#resolutionsresolutions的值除了语义化版本还支持本地路径如file:./local-forks/transitive-package-2常用于「本地 fork 一个包并替换远程版本」的场景。需要留意的是前面提到的yarn install --flat在发生版本冲突时会自动把解析结果写入resolutions字段两者是配套使用的机制。yarn create一条命令初始化项目yarn create是 Yarn 提供的脚手架命令它会先安装指定的create-xxx初始化工具再以初始化的方式运行它。例如yarn create react-app hello该命令等价于「先安装create-react-app再运行create-react-app hello」两个步骤的合并省去了全局安装脚手架的麻烦且每次都能拉取工具的最新版本。这一模式与 npm 侧npm init pkg等价于npx pkg的机制类似可参考 npm 备忘清单 中的 init/exec 章节。常用操作示例安装包# 将包添加到“dependencies” $ yarn add package # 将包添加到“devDependencies” $ yarn add -D package # 将软件包添加为确切版本 $ yarn add -E package # 在您的操作系统上全局安装软件包 $ yarn global add packageyarn global是全局包管理的命名空间除了global add还配套global list、global remove、global upgrade等子命令。移除包$ yarn remove package该命令会从dependencies、devDependencies、peerDependencies、optionalDependencies等所有类型的依赖项中删除指定包并同步更新package.json与yarn.lock。查看包# 列出已安装的软件包 $ yarn list # 列出顶级安装包 $ yarn list --depth0 # 列出已安装的顶级全局包 $ yarn global list --depth0 # 列出带有过滤字符串和深度级别的包 $ yarn list --pattern gulp|grunt --depth1--depth控制依赖树的展示层级--pattern支持正则过滤包名是排查依赖树结构的常用组合。清除与过时检查# 从包依赖项中清理并删除不必要的文件 $ yarn autoclean # 检查过时的包依赖项 $ yarn outdatedyarn autoclean用于清理依赖中不必要的文件以减小体积yarn outdated用于列出落后于 registry 最新版本的依赖便于决定何时升级。信息追溯依赖来源$ yarn why query $ yarn why jestyarn why是排查依赖来源的利器它会显示「某个包为何被安装、由谁依赖、处于哪条依赖链上」在 node_modules 出现重复版本或意外依赖时非常有用。清理缓存$ yarn cache clean运行此命令将清除全局缓存。下次运行yarn或yarn install时它会重新填充缓存。此外还可以在命令后指定一个或多个包名仅清理这些包的缓存。与之对应npm 侧的缓存管理命令npm cache clean等见 npm 备忘清单。与 package.json 的协同要点Yarn 的所有依赖管理行为最终都落回package.json这份清单文件上除上文涉及的字段外还有几个值得了解的协同点flat字段在package.json中设置flat: true可强制整个依赖树只允许给定依赖的一个版本行为等价于命令行yarn install --flat但需要注意若你的包作为库被其他包依赖对方也需要同样声明flat: true或使用--flat安装详见 package.json.md#flat。engines字段可声明包所要求的 Node 与 Yarn 版本范围Yarn 会基于当前环境进行检查例如yarn: ^0.14.0、node: 4.4.7 7.0.0参见 package.json.md#engines。registry 配置Yarn 与 npm 共用 registry 概念默认官方源为https://registry.yarnpkg.com/国内开发者常配置 npmmirror淘宝镜像加速安装相关配置方式.npmrc或npm config set registry在 npm 备忘清单 的配置章节中有完整说明。小结Yarn 作为与 npm 高度兼容又各具特色的包管理器其日常使用可以归纳为一条主线yarn安装→yarn add新增依赖→yarn remove移除依赖→yarn upgrade升级依赖再辅以--exact/--tilde控制版本精度、resolutions覆盖子依赖版本、workspaces组织多包仓库。本文中的命令与选项均可直接复制使用若要进一步深挖package.json各字段的完整语义如exports条件导出、peerDependenciesMeta、publishConfig等可继续阅读 package.json 备忘清单如需对比 npm 侧的命令体系与 npx 机制可参阅 npm 备忘清单。【免费下载链接】reference面向开发者的技术速查清单Cheat Sheets集合整理常见技术、工具与开发流程帮助快速查阅关键信息提高开发效率。项目地址: https://gitcode.com/GitHub_Trending/referen/reference创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考