Deno 與外部代碼連接

2020-06-24 17:05 更新

在 入門 章節(jié)中,我們看到 Deno 能夠從 URL 執(zhí)行腳本。像瀏覽器中的 JavaScript 一樣,Deno 可以從 URL 直接導(dǎo)入代碼庫。 這個(gè)示例使用 URL 來導(dǎo)入一個(gè)斷言庫:

test.ts

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


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


console.log("Asserted! ?");

嘗試運(yùn)行一下:

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

對于這個(gè)程序,我們不需要提供 --allow-net 選項(xiàng)。當(dāng)它訪問網(wǎng)絡(luò)時(shí),Deno 運(yùn)行時(shí)有著特殊權(quán)限來下載模塊并緩存到磁盤。 Deno 在一個(gè)特殊目錄緩存了遠(yuǎn)程模塊,該路徑可以被 DENO_DIR 指定,如果沒有指定,默認(rèn)為系統(tǒng)緩存目錄。下一次運(yùn)行這個(gè)程序時(shí)無需下載。如果這個(gè)程序沒有改動(dòng),它不會(huì)被再次編譯。 系統(tǒng)緩存目錄默認(rèn)為:

  • Linux/Redox: $XDG_CACHE_HOME/deno or $HOME/.cache/deno
  • Windows: %LOCALAPPDATA%/deno (%LOCALAPPDATA% = FOLDERID_LocalAppData)
  • macOS: $HOME/Library/Caches/deno 如果失敗,該路徑設(shè)置為 $HOME/.deno。

FAQ

如何導(dǎo)入特定版本?

只需在 URL 中指定版本。舉個(gè)例子,這個(gè) URL 指定了要運(yùn)行的版本 https://unpkg.com/liltest@0.0.5/dist/liltest.js。

到處導(dǎo)入 URL 似乎很麻煩

如果其中一個(gè) URL 鏈接到一個(gè)完全不同的庫版本,該怎么辦? 在大型項(xiàng)目中到處維護(hù) URL 是否容易出錯(cuò)? 解決辦法是在一個(gè)中心化的 deps.ts 中重新導(dǎo)出所依賴的外部庫,它和 Node 的 package.json 具有相同的作用。 舉個(gè)例子,您正在一個(gè)大型項(xiàng)目中使用一個(gè)斷言庫,您可以創(chuàng)建一個(gè) deps.ts 文件來導(dǎo)出第三方代碼,而不是到處導(dǎo)入 "https://deno.land/std/testing/asserts.ts"。

deps.ts

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

在這個(gè)項(xiàng)目中,您可以從 deps.ts 導(dǎo)入,避免對相同的 URL 產(chǎn)生過多引用。

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

這種設(shè)計(jì)避免了由包管理軟件、集中的代碼存儲(chǔ)庫和多余的文件格式所產(chǎn)生的大量復(fù)雜性。

如何信任可能更改的 URL?

使用 --lock 命令行選項(xiàng),通過一個(gè)鎖文件 (lock file),您可以確保從一個(gè) URL 下載的代碼和初始開發(fā)時(shí)一樣。更多信息請看 這里。

如果依賴宕機(jī)怎么辦?源代碼將不再可用。

像上面一樣,這是 任何 遠(yuǎn)程依賴系統(tǒng)都要面對的問題。 依賴外部服務(wù)在開發(fā)時(shí)很方便,但在生產(chǎn)環(huán)境很脆弱。生產(chǎn)級(jí)軟件總是應(yīng)該打包 (vendor) 所有依賴。 在 Node 中,這需要將 node_modules 檢入版本控制系統(tǒng)。 在 Deno 中,這需要在運(yùn)行時(shí)將 $DENO_DIR 指向項(xiàng)目內(nèi)的目錄,同樣把依賴檢入版本控制系統(tǒng)。

## 下載依賴
DENO_DIR=./deno_dir deno cache src/deps.ts


## 確保需要緩存的任何命令都設(shè)置了 `DENO_DIR` 變量
DENO_DIR=./deno_dir deno test src


## 將緩存目錄檢入版本控制
git add -u deno_dir
git commit
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)