On this page
使用本地和未发布的包
并非每个依赖都存在于 JSR 或 npm 上。Deno 提供了两种受支持的方式来使用
未发布到任何地方的代码:用于本地目录的 links 字段,以及
用于可通过 URL 访问代码的普通 HTTPS 导入。
使用 links 链接本地包 Jump to heading
deno.json 中的 links 字段在 Node.js 中扮演着 npm link 的角色:它
在开发期间用本地目录覆盖某个依赖。给定一个本地
具有 name、version 和 exports 的包:
{
"name": "@acme/greeter",
"version": "0.1.0",
"exports": "./mod.ts"
}
export function greet(name: string): string {
return `Hello, ${name}!`;
}
使用 links 将你的应用指向它,并像导入注册表
包一样导入它:
{
"links": ["../greeter"],
"imports": {
"@acme/greeter": "jsr:@acme/greeter@^0.1.0"
}
}
import { greet } from "@acme/greeter";
console.log(greet("local package"));
$ deno run main.ts
Hello, local package!
链接的目录会被使用,而不是注册表;这个包甚至不必
已经发布。对 greeter/ 的修改会直接被获取。
links 仅在工作区根目录中生效。链接 npm 包也
可以工作,但需要一个 node_modules 目录,并且包名必须存在
于 npm 注册表中。
直接从 HTTPS URL 导入 Jump to heading
任何可通过 HTTPS 访问的模块都可以直接导入,包括来自 GitHub 仓库的原始文件:
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;请参阅
私有仓库 了解详情。
只从你信任的来源通过 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 解析期间被静默跳过:
它们既不起作用也不会报错。
支持的替代方案有:
关于锁文件、版本范围以及依赖的其他所有内容,请参阅 包文档。