On this page
私有仓库
在某些情况下,你可能希望加载位于 私有 仓库中的远程模块,例如 GitHub 上的私有仓库。
Deno 支持在请求远程模块时发送 bearer 令牌。Bearer 令牌是 OAuth 2.0 中使用的主要访问令牌类型,并且被各类托管服务广泛支持(例如 GitHub、GitLab、Bitbucket、Cloudsmith 等)。
DENO_AUTH_TOKENS Jump to heading
Deno CLI 会查找名为 DENO_AUTH_TOKENS 的环境变量,以确定在请求远程模块时应考虑使用哪些身份验证令牌。该环境变量的值格式为以分号(;)分隔的 n 个令牌,其中每个令牌要么是:
- 格式为
{token}@{hostname[:port]}的 bearer 令牌,或者 - 格式为
{username}:{password}@{hostname[:port]}的基本身份验证数据
例如,针对 deno.land 的单个令牌看起来大致如下:
DENO_AUTH_TOKENS=a1b2c3d4e5f6@deno.land
或者:
DENO_AUTH_TOKENS=username:password@deno.land
多个令牌则会像这样:
DENO_AUTH_TOKENS=a1b2c3d4e5f6@deno.land;f1e2d3c4b5a6@example.com:8080;username:password@deno.land
当 Deno 去获取远程模块时,如果主机名与远程模块的主机名匹配,Deno 会将请求的 Authorization 标头设置为 Bearer {token} 或 Basic {base64EncodedData}。这使远程服务器能够识别该请求是与某个已认证用户相关联的授权请求,并为该服务器上的相应资源和模块提供访问权限。
GitHub Jump to heading
要访问 GitHub 上的私有仓库,你需要为自己生成一个 个人访问令牌。你可以通过登录 GitHub,然后进入 设置 -> 开发者设置 -> 个人访问令牌 来完成:

然后你需要选择 生成新令牌,并为你的令牌添加描述以及对 repo 范围的适当访问权限。repo 范围将启用读取文件内容(关于 GitHub 文档中的作用域 的更多信息):

创建完成后,GitHub 会仅显示一次新令牌,你需要将该值用于环境变量中:

为了访问位于 GitHub 私有仓库中的模块,你应当在 DENO_AUTH_TOKENS 环境变量中使用生成的令牌,并将其作用域限定到 raw.githubusercontent.com 主机名。例如:
DENO_AUTH_TOKENS=a1b2c3d4e5f6@raw.githubusercontent.com
这应该能让 Deno 访问该令牌所对应用户有权访问的任何模块。
当令牌不正确,或者用户无权访问该模块时,GitHub 会返回 404 Not Found 状态,而不是未授权状态。因此,如果你在命令行中访问模块时遇到“未找到”的错误,请检查环境变量设置和个人访问令牌设置。
此外,deno run -L debug 应该会打印一条调试信息,说明从环境变量中解析出了多少个令牌。如果它认为某些令牌格式不正确,则会打印错误信息。出于安全考虑,它不会打印任何有关这些令牌的详细信息。