Yarn 是一个快速、可靠、安全的依赖管理工具,由 Facebook、Google、Exponent 和 Tilde 共同开发。它能够帮助你更高效地管理项目的依赖。以下是在不同操作系统上安装和使用 Yarn 的方法。
在 macOS 上安装 Yarn
通过 Homebrew 安装:
- 打开终端。
- 如果你还没有安装 Homebrew,先安装它:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- 使用 Homebrew 安装 Yarn:
brew install yarn
通过 npm 安装:
如果你已经安装了 Node.js 和 npm,你可以通过 npm 安装 Yarn:
- 打开终端。
- 输入命令:
npm install -g yarn
在 Windows 上安装 Yarn
通过 Chocolatey 安装:
- 打开 PowerShell(以管理员身份)。
- 如果你还没有安装 Chocolatey,先按照其官方安装指南进行安装。
- 使用 Chocolatey 安装 Yarn:
choco install yarn
通过 npm 安装:
如果你已经安装了 Node.js 和 npm,可以通过 npm 安装 Yarn:
- 打开命令提示符或 PowerShell。
- 输入命令:
npm install -g yarn
在 Linux 上安装 Yarn
通过 Debian/Ubuntu 的 APT 包管理器安装:
- 打开终端。
- 配置 Yarn APT 仓库:
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
- 更新 APT 索引并安装 Yarn:
sudo apt update && sudo apt install yarn
通过 npm 安装:
如果你已经安装了 Node.js 和 npm,可以通过 npm 安装 Yarn:
- 打开终端。
- 输入命令:
npm install -g yarn
使用 Yarn
初始化新项目:
yarn init
这将引导你完成创建一个 package.json
文件的过程。
添加依赖:
yarn add [package]
yarn add [package]@[version]
yarn add [package]@[tag]
这会将依赖添加到你的 package.json
和 yarn.lock
文件中。
更新依赖:
yarn upgrade [package]
yarn upgrade [package]@[version]
yarn upgrade [package]@[tag]
移除依赖:
yarn remove [package]
安装项目依赖:
yarn install
这将根据 package.json
和 yarn.lock
文件安装所有依赖。
安装常见问题和解决方法
- 报错信息:
command not found: yarn
-
- 解决方法:确保Yarn已经安装。如果未安装,根据官方文档进行安装。如果已安装,检查环境变量配置是否包含Yarn的安装路径。
- 报错信息:
There appears to be trouble with your network connection. Retrying...
-
- 解决方法:检查网络连接。尝试使用
yarn config set network-timeout 100000
来增加网络超时时间。
- 解决方法:检查网络连接。尝试使用
- 报错信息:
error An unexpected error occurred: "EACCES: permission denied, open '...'"
-
- 解决方法:避免使用
sudo
运行Yarn命令。检查文件或目录的权限,确保当前用户有足够的权限。
- 解决方法:避免使用
- 报错信息:
error Couldn't find package "[package-name]" on the "npm" registry.
-
- 解决方法:检查包名是否拼写正确。如果正确,可能是网络问题,尝试更换npm镜像源。
- 报错信息:
error An unexpected error occurred: "ENOSPC: no space left on device, write"
-
- 解决方法:检查磁盘空间,释放空间或清理
node_modules
文件夹和yarn cache clean
。
- 解决方法:检查磁盘空间,释放空间或清理
- 报错信息:
warning Your current version of Yarn is out of date. Please upgrade to the latest version.
-
- 解决方法:按照提示更新Yarn到最新版本,使用命令
npm install -g yarn
或根据官方文档的指引进行更新。
- 解决方法:按照提示更新Yarn到最新版本,使用命令
- 报错信息:
error An unexpected error occurred: "EINTEGRITY: sha512-..."
-
- 解决方法:通常由包的缓存损坏引起。运行
yarn cache clean
然后再次尝试安装。
- 解决方法:通常由包的缓存损坏引起。运行
- 报错信息:
error [package-name]@version: The engine "node" is incompatible with this module. Expected version ">=x.x.x". Got "y.y.y"
-
- 解决方法:升级或降级Node.js到兼容的版本。
- 报错信息:
error Found incompatible module
-
- 解决方法:检查项目的
package.json
文件中指定的依赖版本是否与已安装的Node.js版本兼容。
- 解决方法:检查项目的
- 报错信息:
warning [package-name] > [dependency-name]@version has unmet peer dependency [peer-dependency-name]@version.
-
- 解决方法:手动安装未满足的peer依赖到项目中。
- 报错信息:
error An unexpected error occurred: "EPERM: operation not permitted, unlink '...'"
-
- 解决方法:运行命令提示符或终端以管理员身份,或检查是否有其他进程锁定了文件。
- 报错信息:
error Couldn't find any versions for "[package-name]" that matches "x.x.x"
-
- 解决方法:检查请求的版本号是否存在。如果存在,可能是网络问题或npm镜像源问题。
- 报错信息:
warning Skipping preferred cache folder "[folder-path]" because it is not writable.
-
- 解决方法:更改缓存文件夹的权限或指定一个新的缓存路径,使用
yarn config set cache-folder [path]
。
- 解决方法:更改缓存文件夹的权限或指定一个新的缓存路径,使用
- 报错信息:
error Invalid version: "x.x.x"
-
- 解决方法:检查
package.json
中指定的版本号格式是否正确。
- 解决方法:检查
- 报错信息:
error Could not resolve dependency: [package-name]@[version] from the root project
-
- 解决方法:确认依赖包的版本号是否正确,尝试清除Yarn缓存
yarn cache clean
并重新安装依赖。
- 解决方法:确认依赖包的版本号是否正确,尝试清除Yarn缓存
- 报错信息:
error Package "[package-name]" refers to a non-existing file '[...]'
-
- 解决方法:检查
package.json
中指定的文件路径是否存在。如果是本地依赖,确保路径正确并且文件未被忽略。
- 解决方法:检查
- 报错信息:
error Integrity check failed for "[package-name]" (computed integrity doesn't match our records, got "sha512-...")
-
- 解决方法:这通常意味着包的缓存已损坏。运行
yarn cache clean [package-name]
清除指定包的缓存,然后重新安装。
- 解决方法:这通常意味着包的缓存已损坏。运行
- 报错信息:
warning [package-name]@version: License should be a valid SPDX license expression
-
- 解决方法:这是一个警告,不会阻止包的安装。检查
package.json
中的license
字段,确保其值是一个有效的SPDX许可表达式。
- 解决方法:这是一个警告,不会阻止包的安装。检查
- 报错信息:
error An unexpected error occurred: "ENOTEMPTY: directory not empty, rmdir '...'"
-
- 解决方法:确保在运行
yarn install
或相关命令之前,目标目录为空或不存在其他进程正在使用该目录。
- 解决方法:确保在运行
- 报错信息:
error [package-name]@version requires a peer of [peer-dependency-name]@version but none is installed. You must install peer dependencies yourself.
-
- 解决方法:手动安装缺失的peer依赖。使用
yarn add [peer-dependency-name]@version
安装指定版本的peer依赖。
- 解决方法:手动安装缺失的peer依赖。使用
- 报错信息:
error An unexpected error occurred: "ELOOP: too many symbolic links encountered, stat '...'"
-
- 解决方法:检查是否存在循环符号链接。如果是在
node_modules
中,尝试删除node_modules
目录和yarn.lock
文件,然后重新运行yarn install
。
- 解决方法:检查是否存在循环符号链接。如果是在
- 报错信息:
error Couldn't publish package: "npm ERR! publish Failed PUT 403"
-
- 解决方法:确保你有权限发布到npm仓库,并且包名没有被占用。如果是私有包,检查是否登录了正确的npm账户。
- 报错信息:
error An unexpected error occurred: "Z_BUF_ERROR: zlib: unexpected end of file"
-
- 解决方法:这可能是因为文件损坏或不完整。尝试清除Yarn和npm的缓存,使用
yarn cache clean
和npm cache clean --force
。
- 解决方法:这可能是因为文件损坏或不完整。尝试清除Yarn和npm的缓存,使用
- 报错信息:
error [package-name]@version: The engine "yarn" is incompatible with this module. Expected version ">=x.x.x". Got "y.y.y"
-
- 解决方法:升级Yarn到兼容的版本。使用
npm install -g yarn
来更新Yarn。
- 解决方法:升级Yarn到兼容的版本。使用
- 报错信息:
error An unexpected error occurred: "Failed to replace env in config: ${NPM_TOKEN}"
-
- 解决方法:确保环境变量
NPM_TOKEN
已正确设置。如果在CI环境中,检查环境变量是否已正确传递给构建过程。
- 解决方法:确保环境变量
使用过程常见问题
- 报错信息:
error Could not find package.json
-
- 解决方法:确保你在项目根目录下运行Yarn命令,该目录应包含
package.json
文件。
- 解决方法:确保你在项目根目录下运行Yarn命令,该目录应包含
- 报错信息:
error An unexpected error occurred: "ENOENT: no such file or directory, open '...'"
-
- 解决方法:检查报错信息中提到的文件或目录是否存在。如果是在执行特定命令时出现,尝试先运行
yarn install
。
- 解决方法:检查报错信息中提到的文件或目录是否存在。如果是在执行特定命令时出现,尝试先运行
- 报错信息:
error Your lockfile needs to be updated, but yarn was run with '--frozen-lockfile'.
-
- 解决方法:在CI/CD环境中,确保
yarn.lock
文件是最新的。本地开发时,移除--frozen-lockfile
参数,运行yarn install
更新yarn.lock
文件。
- 解决方法:在CI/CD环境中,确保
- 报错信息:
warning package.json: No license field
-
- 解决方法:在
package.json
文件中添加一个license
字段。例如,"license": "MIT"
,以避免此警告。
- 解决方法:在
- 报错信息:
error An unexpected error occurred: "EACCES: permission denied, access '...'"
-
- 解决方法:更改文件或目录的权限,使用
chmod
命令(Linux/macOS),或以管理员身份运行命令(Windows)。
- 解决方法:更改文件或目录的权限,使用
- 报错信息:
error Couldn't find the binary git
-
- 解决方法:确保Git已安装并且添加到了环境变量中。可以通过在终端运行
git --version
来检查Git是否可用。
- 解决方法:确保Git已安装并且添加到了环境变量中。可以通过在终端运行
- 报错信息:
error An unexpected error occurred: "ENOSPC: System limit for number of file watchers reached, watch '...'"
-
- 解决方法:这通常发生在Linux系统上。可以通过运行
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
命令来增加文件监视器的数量限制。
- 解决方法:这通常发生在Linux系统上。可以通过运行
- 报错信息:
error network connection error. Retrying...
-
- 解决方法:检查网络连接。如果网络正常,可能是npm仓库不稳定或被墙,尝试更换npm仓库源,例如使用淘宝的npm镜像。
- 报错信息:
error An unexpected error occurred: "EPROTO: protocol error, symlink '...'"
-
- 解决方法:这通常发生在Windows上,尝试以管理员身份运行命令提示符或PowerShell。
- 报错信息:
error Missing script: "start"
-
- 解决方法:在
package.json
的scripts
字段中添加缺失的脚本。例如,如果你想运行一个名为start
的命令,确保package.json
中包含"start": "node yourScript.js"
。
- 解决方法:在
- 报错信息:
error An unexpected error occurred: "Invalid version: \"x.x.x\""
-
- 解决方法:检查
package.json
中的版本号是否遵循语义版本控制规范(semver)。正确的版本号格式为主版本号.次版本号.修订号
。
- 解决方法:检查
- 报错信息:
error Couldn't find package "[package-name]" on the "npm" registry.
-
- 解决方法:检查包名是否拼写正确。如果是私有包,确保你已登录(使用
yarn login
)并且有权限访问该包。
- 解决方法:检查包名是否拼写正确。如果是私有包,确保你已登录(使用
- 报错信息:
error An unexpected error occurred: "EPERM: operation not permitted, unlink '...'"
-
- 解决方法:尝试重新启动你的计算机。如果问题仍然存在,以管理员身份运行命令提示符或终端。
- 报错信息:
error An unexpected error occurred: "EEXIST: file already exists, mkdir '...'"
-
- 解决方法:删除已存在的目录或文件,或检查是否有其他进程正在使用该目录或文件。
- 报错信息:
error An unexpected error occurred: "ENOTDIR: not a directory, scandir '...'"
-
- 解决方法:确保指定的路径是一个目录而不是文件。如果路径正确,尝试删除并重新创建目录。
- 报错信息:
error An unexpected error occurred: "EHOSTUNREACH: Host is unreachable, '...'."
-
- 解决方法:这通常表明无法连接到指定的服务器。检查你的网络连接,确保没有防火墙或代理设置阻止了Yarn的请求。
- 报错信息:
error An unexpected error occurred: "ETIMEDOUT: request to '...' timed out."
-
- 解决方法:请求超时可能是由于网络连接慢或npm仓库服务器响应慢造成的。尝试更换网络连接,或使用
yarn config set network-timeout 100000
来增加超时时间。
- 解决方法:请求超时可能是由于网络连接慢或npm仓库服务器响应慢造成的。尝试更换网络连接,或使用
- 报错信息:
error [package-name]@version: The engine "node" is incompatible with this module. Expected version ">=x.x.x". Got "y.y.y"
-
- 解决方法:这表明当前使用的Node.js版本与包要求的版本不兼容。升级或降级Node.js版本以满足包的要求。
- 报错信息:
warning [package-name] > [dependency-name]@version: [dependency-name]@"version" is deprecated
-
- 解决方法:这是一个警告,表示某个依赖已被废弃。尽量避免使用已废弃的依赖,或检查是否有更新的版本可用。
- 报错信息:
error An unexpected error occurred: "EISDIR: illegal operation on a directory, read"
-
- 解决方法:尝试删除
node_modules
目录和yarn.lock
文件,然后重新运行yarn install
。
- 解决方法:尝试删除
- 报错信息:
error An unexpected error occurred: "SHA-1 for file ... does not match the expected value."
-
- 解决方法:这可能是因为文件被损坏。尝试清除Yarn缓存
yarn cache clean
,然后重新运行yarn install
。
- 解决方法:这可能是因为文件被损坏。尝试清除Yarn缓存
- 报错信息:
error Invalid option "--optionName"
-
- 解决方法:检查命令行中使用的选项是否正确。参考Yarn的官方文档来查找正确的选项。
- 报错信息:
error package.json: Name contains illegal characters
-
- 解决方法:确保
package.json
中的name
字段只包含小写字母、数字、连字符(-)、下划线(_)和点(.),并且不以点或下划线开头。
- 解决方法:确保
- 报错信息:
error An unexpected error occurred: "EAI_AGAIN: Temporary failure in name resolution."
-
- 解决方法:这通常是DNS解析问题。检查网络设置,或尝试更换DNS服务器。
- 报错信息:
error An unexpected error occurred: "ERR! code ELIFECYCLE"
-
- 解决方法:这通常与npm脚本的执行失败有关。检查
package.json
中的scripts
字段,确保相应的脚本可以正确执行。查看详细的错误日志来定位问题。
- 解决方法:这通常与npm脚本的执行失败有关。检查