--- title: "从 Yarn 迁移" description: "如何将 Yarn 项目迁移到 Deno:从现有的 package.json 安装依赖,保留固定版本,将 Yarn CLI 命令映射到 Deno,原样运行工作区,以及如何处理 Plug'n'Play。" last_modified: 2026-06-25 --- Yarn 是一个包管理器,不是运行时,因此你“迁移”的大部分内容是 配置,而不是代码。Yarn Classic 和 Yarn Berry 都使用标准的 `package.json` 来描述项目,而 Deno 会直接读取它:它会安装并解析相同的 npm 依赖,并运行你的脚本。一个典型的 Yarn 项目在 Deno 下通常无需任何改动即可运行。 唯一需要做出决定的 Yarn 功能是 Plug'n'Play,也就是 Yarn Berry 的默认 安装模式。Deno 不使用 PnP;它会安装一个真实的 `node_modules` 目录。下面会对此进行说明。 ## 运行你的项目 安装依赖并运行你的入口文件: ```sh cd my-yarn-app deno install deno run main.js ``` `deno install` 会读取你现有的 `package.json` 并解析相同的 npm 包,就像 `yarn install` 一样。它会写入一个 `node_modules` 目录以及它自己的 [`deno.lock`](/runtime/packages/#lockfile-and-reproducible-installs)。 在你第一次执行 `deno install` 时,如果还没有 `deno.lock`,Deno 会从 Yarn Classic (v1) 的 `yarn.lock` 进行初始化,沿用你已经锁定的版本和完整性 哈希。Yarn Berry (v2+) 使用不同的锁文件格式,Deno 不会从中初始化;在这种情况下,Deno 会重新解析你的 `package.json` 范围,因此在提交之前请先检查 `deno.lock`。 `package.json` 中定义的脚本会使用 [`deno task`](/runtime/reference/cli/task/) 运行,它相当于 `yarn run`: ```sh deno task start ``` 如果你还把应用从 Node 切换到 Deno 运行,那么要预期 一个立刻可见的差异:**Deno 默认是沙箱化的**。程序第一次访问 网络、文件系统或环境变量时,Deno 会提示请求权限。 你可以先使用 `deno run -A main.js` 一次性授予全部权限,以匹配 Node 的 行为,然后再在之后收紧这些标志。参见 [安全性与权限](/runtime/fundamentals/security/)。 ## Yarn 到 Deno 对照速查表
### 依赖 | Yarn | Deno | | -------------------------- | ------------------- | | `yarn install` | `deno install` | | `yarn add ` | `deno add ` | | `yarn add -D ` | `deno add -D ` | | `yarn remove ` | `deno remove ` | | `yarn up ` | `deno update` | | `yarn outdated` | `deno outdated` | | `yarn install --immutable` | `deno ci` | | `yarn npm audit` | `deno audit` | | `yarn why ` | `deno why ` | ### 运行与执行 | Yarn | Deno | | ------------------- | -------------------- | | `node file.js` | `deno file.js` | | `yarn