本页内容

私有模块和仓库

在某些情况下,您可能希望加载位于私有存储库中的远程模块,例如 GitHub 上的私有存储库。

Deno 支持在请求远程模块时发送承载令牌。承载令牌是与 OAuth 2.0 一起使用的主要类型的访问令牌,并且被托管服务(例如 GitHub、GitLab、Bitbucket、Cloudsmith 等)广泛支持。

DENO_AUTH_TOKENS 跳转到标题

Deno CLI 将查找名为 DENO_AUTH_TOKENS 的环境变量,以确定在请求远程模块时应使用哪些身份验证令牌。环境变量的值采用n个令牌以分号 (;) 分隔的形式,其中每个令牌是

  • 格式为 {token}@{hostname[:port]} 的承载令牌,或者

  • 格式为 {username}:{password}@{hostname[:port]} 的基本身份验证数据

例如,deno.land 的单个令牌看起来像这样

或者

DENO_AUTH_TOKENS=username:[email protected]

多个令牌看起来像这样

当 Deno 去获取远程模块时,如果主机名与远程模块的主机名匹配,Deno 将将请求的 Authorization 标头设置为 Bearer {token}Basic {base64EncodedData} 的值。这允许远程服务器识别请求是与特定已认证用户绑定的授权请求,并提供对服务器上适当资源和模块的访问。

GitHub 跳转到标题

要访问 GitHub 上的私有存储库,您需要为自己颁发一个个人访问令牌。您可以通过登录 GitHub 并进入设置 -> 开发者设置 -> 个人访问令牌来完成此操作

Personal access tokens settings on GitHub

然后,您将选择生成新的令牌,并为您的令牌提供描述和适当的访问权限

Creating a new personal access token on GitHub

创建完成后,GitHub 将仅显示一次新令牌的值,您需要在环境变量中使用该值

Display of newly created token on GitHub

为了访问包含在 GitHub 上的私有存储库中的模块,您需要在作用域为 raw.githubusercontent.com 主机名的 DENO_AUTH_TOKENS 环境变量中使用生成的令牌。例如

这应该允许 Deno 访问颁发令牌的用户有权访问的任何模块。

当令牌不正确或用户无权访问该模块时,GitHub 将发出 404 Not Found 状态,而不是未授权状态。因此,如果您在命令行中收到有关您尝试访问的模块未找到的错误,请检查环境变量设置和个人访问令牌设置。

此外,deno run -L debug 应该打印有关从环境变量中解析的令牌数量的调试消息。如果它认为任何令牌格式错误,它将打印错误消息。出于安全目的,它不会打印有关令牌的任何详细信息。