W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
在 入門 章節(jié)中,我們看到 Deno 能夠從 URL 執(zhí)行腳本。像瀏覽器中的 JavaScript 一樣,Deno 可以從 URL 直接導入代碼庫。 這個示例使用 URL 來導入一個斷言庫:
import { assertEquals } from "https://deno.land/std/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/testing/asserts.ts
Download https://deno.land/std/fmt/colors.ts
Download https://deno.land/std/testing/diff.ts
Asserted! ?
對于這個程序,我們不需要提供 --allow-net 選項。當它訪問網(wǎng)絡時,Deno 運行時有著特殊權限來下載模塊并緩存到磁盤。 Deno 在一個特殊目錄緩存了遠程模塊,該路徑可以被 DENO_DIR 指定,如果沒有指定,默認為系統(tǒng)緩存目錄。下一次運行這個程序時無需下載。如果這個程序沒有改動,它不會被再次編譯。 系統(tǒng)緩存目錄默認為:
只需在 URL 中指定版本。舉個例子,這個 URL 指定了要運行的版本 https://unpkg.com/liltest@0.0.5/dist/liltest.js。
如果其中一個 URL 鏈接到一個完全不同的庫版本,該怎么辦? 在大型項目中到處維護 URL 是否容易出錯? 解決辦法是在一個中心化的 deps.ts 中重新導出所依賴的外部庫,它和 Node 的 package.json 具有相同的作用。 舉個例子,您正在一個大型項目中使用一個斷言庫,您可以創(chuàng)建一個 deps.ts 文件來導出第三方代碼,而不是到處導入 "https://deno.land/std/testing/asserts.ts"。
export {
assert,
assertEquals,
assertStrContains,
} from "https://deno.land/std/testing/asserts.ts";
在這個項目中,您可以從 deps.ts 導入,避免對相同的 URL 產(chǎn)生過多引用。
import { assertEquals, runTests, test } from "./deps.ts";
這種設計避免了由包管理軟件、集中的代碼存儲庫和多余的文件格式所產(chǎn)生的大量復雜性。
使用 --lock 命令行選項,通過一個鎖文件 (lock file),您可以確保從一個 URL 下載的代碼和初始開發(fā)時一樣。更多信息請看 這里。
像上面一樣,這是 任何 遠程依賴系統(tǒng)都要面對的問題。 依賴外部服務在開發(fā)時很方便,但在生產(chǎn)環(huán)境很脆弱。生產(chǎn)級軟件總是應該打包 (vendor) 所有依賴。 在 Node 中,這需要將 node_modules 檢入版本控制系統(tǒng)。 在 Deno 中,這需要在運行時將 $DENO_DIR 指向項目內(nèi)的目錄,同樣把依賴檢入版本控制系統(tǒng)。
## 下載依賴
DENO_DIR=./deno_dir deno cache src/deps.ts
## 確保需要緩存的任何命令都設置了 `DENO_DIR` 變量
DENO_DIR=./deno_dir deno test src
## 將緩存目錄檢入版本控制
git add -u deno_dir
git commit
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: