4 deno链接到第三方代码

2021-05-11  本文已影响0人  9e8aeff1c70c

"开始"部分,我们看到 Deno 可以执行来自 URL 的脚本。与浏览器 JavaScript 一样,Deno 可以直接从 URL 导入库。此示例使用 URL 导入断言库:

test.ts

import { assertEquals } from "https://deno.land/std@0.95.0/testing/asserts.ts";

assertEquals("hello", "hello");
assertEquals("world", "world");

console.log("Asserted! ✓");

尝试运行它:

$ deno run test.ts
Compile file:///mnt/f9/Projects/github.com/denoland/deno/docs/test.ts
Download https://deno.land/std@0.95.0/testing/asserts.ts
Download https://deno.land/std@0.95.0/fmt/colors.ts
Download https://deno.land/std@0.95.0/testing/diff.ts
Asserted! ✓

请注意,我们不必为此程序提供标志,但它访问网络。运行时具有下载导入并缓存到磁盘的特殊访问权限。--allow-net

Deno 将远程导入缓存到环境变量指定的特殊目录中。如果不指定,则会默认为系统缓存目录。下次运行程序时,不会进行下载。如果程序没有改变,它也不会被重新编译。默认目录是:DENO_DIR``DENO_DIR

常见问题

如何导入模块的特定版本?

在URL中指定版本。例如,此 URL 完全指定正在运行的代码:.https://unpkg.com/liltest@0.0.5/dist/liltest.js

到处导入网址似乎很笨拙。

如果其中一个网址链接到一个微妙的不同版本的库呢?

在大型项目中,在任何地方维护网址都不容易出错吗?

解决方案是在中央文件中导入和转口外部库(其用途与节点文件相同)。例如,假设您在大型项目中使用了上述断言库。您可以创建一个输出第三方代码的文件,而不是随处导入:deps.ts``package.json``"https://deno.land/std@0.95.0/testing/asserts.ts"``deps.ts

deps.ts

export {
  assert,
  assertEquals,
  assertStrContains,
} from "https://deno.land/std@0.95.0/testing/asserts.ts";

在整个相同的项目中,您可以从该项目导入并避免多次引用相同的URL:deps.ts

import { assertEquals, runTests, test } from "./deps.ts";

此设计规避了包管理软件、集中代码存储库和多余文件格式产生的大量复杂性。

如何信任可能会更改的网址?

通过使用锁定文件(带有命令行标志),您可以确保从 URL 中拉出的代码与初始开发期间相同。你可以在这里了解更多关于这一点--lock

但是,如果URL的主机出现问题,该怎么办?源将不可用。

与上述情况一样,这是任何远程依赖系统所面临的问题。依靠外部服务器便于开发,但生产脆弱。生产软件应始终供应商其依赖关系。在节点中,这是通过检查源控制来完成的。在 Deno 中,这是通过在运行时指向某些项目本地目录,并同样将该目录签入源控制来完成的:node_modules``$DENO_DIR

# Download the dependencies.
DENO_DIR=./deno_dir deno cache src/deps.ts

# Make sure the variable is set for any command which invokes the cache.
DENO_DIR=./deno_dir deno test src

# Check the directory into source control.
git add -u deno_dir
git commit
上一篇 下一篇

猜你喜欢

热点阅读