Skip to main content
On this page

使用本地和未发布的包

并非每个依赖都存在于 JSR 或 npm 上。Deno 提供了两种受支持的方式来使用 未发布到任何地方的代码:用于本地目录的 links 字段,以及 用于可通过 URL 访问代码的普通 HTTPS 导入。

deno.json 中的 links 字段在 Node.js 中扮演着 npm link 的角色:它 在开发期间用本地目录覆盖某个依赖。给定一个本地 具有 nameversionexports 的包:

greeter/deno.json
{
  "name": "@acme/greeter",
  "version": "0.1.0",
  "exports": "./mod.ts"
}
greeter/mod.ts
export function greet(name: string): string {
  return `Hello, ${name}!`;
}

使用 links 将你的应用指向它,并像导入注册表 包一样导入它:

my-app/deno.json
{
  "links": ["../greeter"],
  "imports": {
    "@acme/greeter": "jsr:@acme/greeter@^0.1.0"
  }
}
my-app/main.ts
import { greet } from "@acme/greeter";

console.log(greet("local package"));
>_
$ deno run main.ts
Hello, local package!

链接的目录会被使用,而不是注册表;这个包甚至不必 已经发布。对 greeter/ 的修改会直接被获取。

Note

links 仅在工作区根目录中生效。链接 npm 包也 可以工作,但需要一个 node_modules 目录,并且包名必须存在 于 npm 注册表中。

直接从 HTTPS URL 导入 Jump to heading

任何可通过 HTTPS 访问的模块都可以直接导入,包括来自 GitHub 仓库的原始文件:

main.ts
import { equal } from "https://raw.githubusercontent.com/denoland/std/cdf74a86680beb4ef74c95e0fd5d71c5d7841eb9/assert/equal.ts";

console.log(equal([1, 2], [1, 2]));
>_
$ deno run main.ts
Download https://raw.githubusercontent.com/denoland/std/cdf74a86680beb4ef74c95e0fd5d71c5d7841eb9/assert/equal.ts
true

将 URL 固定到标签或提交哈希,而不是分支,这样代码就不会在你 不知情的情况下变化。

对于私有仓库,将 DENO_AUTH_TOKENS 设置为一个限定到该主机的个人访问令牌,例如 DENO_AUTH_TOKENS=a1b2c3d4e5f6@raw.githubusercontent.com;请参阅 私有仓库 了解详情。

Caution

只从你信任的来源通过 HTTPS 导入,并且对于 超出小型项目的任何内容,优先使用注册表。deno add/deno install 不支持 HTTPS 导入。

不支持的内容 Jump to heading

Deno 不支持 package.json 中的 git 依赖规范(git+https:/git+ssh:)或 tarball URL 依赖。此外,自 Deno 2.8 起, package.json 依赖中的 file:link: 条目会在 npm 解析期间被静默跳过: 它们既不起作用也不会报错。

支持的替代方案有:

  • 用于本地 目录的 links 字段
  • 用于托管在(可能是私有)git 仓库中的代码的 HTTPS 导入
  • 对你需要修补或离线构建的远程模块进行vendoring
  • 将包发布到 JSR 或 npm

关于锁文件、版本范围以及依赖的其他所有内容,请参阅 包文档

Did you find what you needed?

编辑此页面
Privacy policy