日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Deno:它比Node.js更好嗎?

Ryan's 有關(guān) Node.js 的遺憾在 2018 年 JSConf EU 上著名的演講 “我對 Node.js 遺憾的十件事” 有充分的記錄??偠灾?,他感嘆缺乏對安全性的關(guān)注、通過 node_modules 解析模塊、瀏覽器工作方式的各種偏差以及其他問題,他開始在 Deno 中修復(fù)這些錯(cuò)誤。

創(chuàng)新互聯(lián)建站是一家專注網(wǎng)站建設(shè)、網(wǎng)絡(luò)營銷策劃、小程序制作、電子商務(wù)建設(shè)、網(wǎng)絡(luò)推廣、移動(dòng)互聯(lián)開發(fā)、研究、服務(wù)為一體的技術(shù)型公司。公司成立十年以來,已經(jīng)為1000多家茶藝設(shè)計(jì)各業(yè)的企業(yè)公司提供互聯(lián)網(wǎng)服務(wù)。現(xiàn)在,服務(wù)的1000多家客戶與我們一路同行,見證我們的成長;未來,我們一起分享成功的喜悅。

在本文中,我們將討論 Deno 的創(chuàng)建原因以及它與 Node.js 相比的優(yōu)缺點(diǎn)。還將對 Deno 的怪癖(quirks)和功能做一個(gè)實(shí)用概述,以便您決定它是否適合于您的下一個(gè)項(xiàng)目。

本文主題

安裝 Deno

Deno 做為一個(gè)獨(dú)立的、自包含的二進(jìn)制文件沒有任何依賴。你可以通過多種方式安裝 Deno,具體取決于你的操作系統(tǒng)。最簡單的方法是下載并執(zhí)行一個(gè) shell 腳本,如下所示:

# Linux and macOS
$ curl -fsSL https://deno.land/x/install/install.sh | sh

# Windows PowerShell
$ iwr https://deno.land/x/install/install.ps1 -useb | iex

一旦你為你的操作系統(tǒng)執(zhí)行了適當(dāng)?shù)拿睿珼eno CLI 二進(jìn)制文件將會(huì)下載到你的計(jì)算機(jī)。根據(jù)你選擇的安裝方法,你需要添加這個(gè)二進(jìn)制文件位置到你的 PATH。

你可以在 Bash 中添加以下行到你的 $HOME/bash_profile 文件來執(zhí)行此操作。你可能需要開啟一個(gè)新的 shell 會(huì)話來使更改生效。

export DENO_INSTALL="$HOME/.deno"
export PATH="$DENO_INSTALL/bin:$PATH"

運(yùn)行以下命令,驗(yàn)證 Deno 的安裝版本。如果這個(gè) CLI 已經(jīng)下載成功并且添加到您的 PATH,控制臺應(yīng)該會(huì)打印輸出 Deno 版本信息。

$ deno --version
deno 1.14.2 (release, x86_64-unknown-linux-gnu)
v8 9.4.146.16
typescript 4.4.2

如果你的 Deno 版本已過時(shí),可以通過 upgrade 子命令升級到最新的 release 版本。

$ deno upgrade
Looking up latest version
Found latest version 1.14.2
Checking https://github.com/denoland/deno/releases/download/v1.14.2/deno-x86_64-unknown-linux-gnu.zip
31.5 MiB / 31.5 MiB (100.0%)
Deno is upgrading to version 1.14.2
Archive: /tmp/.tmpfdtMXE/deno.zip
inflating: deno
Upgraded successfully

接下來,編寫一個(gè)常用的 Hello world 程序來驗(yàn)證是否可以正常工作。可以為你的 Deno 項(xiàng)目創(chuàng)建一個(gè)目錄并在該目錄下創(chuàng)建一個(gè) index.ts 文件放入以下代碼:

function hello(str: string) {
return `Hello ${str}!`;
}

console.log(hello("Deno"));

在 deno run 子命令后將文件名做為參數(shù)執(zhí)行,如果輸出 “Hello Deno!”,意味著你已經(jīng)成功的安裝了 Deno。

$ deno run index.ts
Check file:///home/ayo/dev/deno/index.ts
Hello Deno!

要了解 Deno CLI 提供的其它功能及選項(xiàng),使用 --help 標(biāo)志:

$ deno --help

一流的 TypeScript 支持

Deno 相較于 Node.js 的一大賣點(diǎn)是它對 TypeScript 的一流支持。

正如你所看到的,除了安裝 Deno CLI 之外,你不需要做任何的事情讓它來工作。與其前身一樣,使用 V8 引擎運(yùn)行時(shí)來解析解釋和執(zhí)行 JavaScript 代碼,但它還在其可執(zhí)行文件中使用 TypeScript 編譯器以實(shí)現(xiàn)對 TypeScript 的支持。

在后臺,TypeScript 代碼被檢查和編譯。生成的 JavaScript 代碼會(huì)緩存在文件系統(tǒng)上的一個(gè)目錄中,可以再次執(zhí)行而無需從頭編譯。你可以使用 deno info 檢查緩存目錄位置和其它包含 Deno 管理文件的目錄。

在使用 TypeScript 時(shí) Deno 不需要任何配置,但如果你想調(diào)整 TypeScript 編譯器解析代碼的方式,你可以提供一個(gè) JSON 文件指定 TypeScript 的編譯選項(xiàng)。盡管 tsconfig.json 是用 TSC 編譯時(shí)的一個(gè)常見選擇方式,但是 Deno 團(tuán)隊(duì)建議使用 deno.json 因?yàn)槠渌囟ㄓ?Deno 的配置選項(xiàng)也可以放置在這里。

請注意 Deno 不支持所有的 TypeScript 編譯選項(xiàng)。在 Deno 的文檔中提供了一個(gè)完整的可用的的選項(xiàng)和它們的默認(rèn)值。對于 Deno 的示例配置文件如下所示:

{
"compilerOptions": {
"checkJs": true,
"noImplicitReturns": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noUncheckedIndexedAccess": true
}
}

在撰寫本文時(shí),Deno 不會(huì)自動(dòng)檢測 deno.json 文件,因此必須通過 --config 標(biāo)志指定它。然后,這個(gè)功能計(jì)劃在未來的一個(gè)版本發(fā)布。

$ deno run --config deno.json index.ts

當(dāng) Deno CLI 遇到類型錯(cuò)誤時(shí),它會(huì)停止腳本編譯并以非 0 狀態(tài)碼退出終止。你可以通過以下方式繞錯(cuò)錯(cuò)誤:

在錯(cuò)誤發(fā)生的地方使用 //@ts-ignore 或 //@ts-expect-error // @ts-nocheck 在一個(gè)文件的開始忽略所有的錯(cuò)誤。

Deno 還提供了一個(gè) --no-check 標(biāo)志來完全禁用類型檢查。這有助于防止 TypeScript 編譯器在快速迭代問題時(shí)減慢你的速度。

$ deno run --no-check index.ts

權(quán)限功能

Deno 以成為 JavaScript 和 TypeScript 的安全運(yùn)行時(shí)而驕傲。它維護(hù)安全性部分的方式是通過權(quán)限功能完成的。為了演示權(quán)限功能在 Deno 中的工作方式,添加以下腳本到您的 index.ts 文件。這個(gè)腳本會(huì)從 disease.sh 獲取最新的全球 Covid-19 統(tǒng)計(jì)數(shù)據(jù)。

async function getCovidStats() {
try {
const response = await fetch("https://disease.sh/v3/covid-19/all");
const data = await response.json();
console.table(data);
} catch (err) {
console.error(err);
}
}

getCovidStats();

當(dāng)你嘗試執(zhí)行腳本時(shí),它應(yīng)該顯示 PermissionDenied 錯(cuò)誤:

$ deno run index.ts
PermissionDenied: Requires net access to "disease.sh", run again with the --allow-net flag
# PermissionDenied:需要對 “disease.sh” 的網(wǎng)絡(luò)訪問,使用 --allow-net 標(biāo)志再次運(yùn)行。

上面的錯(cuò)誤消息表明腳本沒有給予網(wǎng)絡(luò)訪問權(quán)限,它建議在命令中包含 --allow-net 標(biāo)志以授予訪問權(quán)限。

$ deno run --allow-net index.ts
┌────────────────────────┬───────────────┐
│ (idx) │ Values │
├────────────────────────┼───────────────┤
│ updated │ 1633335683059 │
│ cases │ 235736138 │
│ todayCases │ 32766 │
│ deaths │ 4816283 │
│ todayDeaths │ 670 │
│ recovered │ 212616434 │
│ todayRecovered │ 51546 │
│ active │ 18303421 │
│ critical │ 86856 │
│ casesPerOneMillion │ 30243 │
│ deathsPerOneMillion │ 617.9 │
│ tests │ 3716763329 │
│ testsPerOneMillion │ 473234.63 │
│ population │ 7853954694 │
│ oneCasePerPeople │ 0 │
│ oneDeathPerPeople │ 0 │
│ oneTestPerPeople │ 0 │
│ activePerOneMillion │ 2330.47 │
│ recoveredPerOneMillion │ 27071.26 │
│ criticalPerOneMillion │ 11.06 │
│ affectedCountries │ 223 │
└────────────────────────┴───────────────┘

你可以提供一個(gè)以逗號分隔的主機(jī)名或 IP 地址的允許列表做為 --allow-net的參數(shù),以便腳本僅可以訪問指定的網(wǎng)站,而不是授予腳本訪問所有網(wǎng)站的權(quán)限(如上所示)。如果腳本嘗試鏈接不在允許列表中的列,Deno 將會(huì)阻止它的鏈接,并且腳本將會(huì)執(zhí)行失敗。

$ deno run --allow-net='disease.sh' index.ts

這個(gè)功能是 Deno 對 Node.js 的改進(jìn)之一,任何腳本都可以通過網(wǎng)絡(luò)訪問任何資源。讀取和寫入文件系統(tǒng)也存在類似的權(quán)限。如果一個(gè)腳本需要執(zhí)行任一任務(wù),你需要分別指定 --allow-read 和 --allow-write 權(quán)限。兩個(gè)標(biāo)志允許你為腳本設(shè)置特定可訪問的目錄,以便文件系統(tǒng)的其它部分免受篡改。Deno 還提供了一個(gè) --allow-all 標(biāo)志,如果需要,可以為一個(gè)腳本開啟所有的安全敏感功能。

與瀏覽器 API 的兼容性

Deno 的主要目標(biāo)之一是盡可能與 Web 瀏覽器兼容。這反映在它使用 Web 平臺 API,而不是為某些操作創(chuàng)建特定于 Deno 的 API。例如,我們在上一節(jié)中看到了 Fetch API 的實(shí)際應(yīng)用。這是一個(gè)在瀏覽器中使用的確切 Fetch API,在必要時(shí)有一些偏差以說明 Deno 中獨(dú)特的安全模型(這些更改大多無關(guān)緊要)。

Deno 的在線文檔中列出了所有已實(shí)現(xiàn)的瀏覽器 API。

依賴管理

Deno 管理依賴方式可能是它與 Node.js 的最大不同之處。

Node.js 使用 npm 或 yarn 之類的包管理器將第三方包從 npm 注冊表下載到 node_modules 目錄和 package.json 文件以跟蹤項(xiàng)目的依賴關(guān)系。Deno 摒棄了這些機(jī)制,轉(zhuǎn)而采用更加以瀏覽器為中心的方式來使用第三方包:URLs。

這里有一個(gè)使用 Deno web 應(yīng)用程序框架 Oka 來創(chuàng)建基礎(chǔ) web server 的示例:

import { Application } from "https://deno.land/x/oak/mod.ts";

const app = new Application();

app.use((ctx) => {
ctx.response.body = "Hello Deno!";
});

app.addEventListener("listen", ({ hostname, port, secure }) => {
console.log(`Listening on: http://localhost:${port}`);
});

await app.listen({ port: 8000 });

Deno 使用 ES 模塊,與 Web 瀏覽器中使用的模塊系統(tǒng)相同。只要引用的腳本(模塊)導(dǎo)出方法或其它值,就可以從絕對路徑或相對路徑導(dǎo)入模塊。值得注意的是,文件擴(kuò)展名必須始終存在,無論您是從絕對路徑還是相對路徑導(dǎo)入。

雖然您可以從任何 URL 導(dǎo)入模塊,但許多專門為 Deno 構(gòu)建的第三方模塊都通過 **deno.land/x** 進(jìn)行緩存。每次發(fā)布模塊的新版本時(shí),它都會(huì)自動(dòng)緩存在該位置并使其不可變,以便模塊的特定版本內(nèi)容保持不變。

假設(shè)您運(yùn)行上一個(gè)片段中的代碼。在這種情況下,它將下載模塊及其所有依賴項(xiàng)并將它們緩存在本地 DENO_DIR 環(huán)境變量指定的目錄中(默認(rèn)應(yīng)為 $HOME/.cache/deno)。下次程序運(yùn)行時(shí),將不會(huì)再次下載,因?yàn)樗幸蕾図?xiàng)都已緩存在本地。這類似于 Go 模塊系統(tǒng)的工作方式。

$ deno run --allow-net index.ts
Download https://deno.land/x/oak/mod.ts
Warning Implicitly using latest version (v9.0.1) for https://deno.land/x/oak/mod.ts
Download https://deno.land/x/oak@v9.0.1/mod.ts

對于生產(chǎn)應(yīng)用程序,Deno 創(chuàng)建者建議檢查您的依賴性已進(jìn)入代碼版本控制系統(tǒng),以確保持續(xù)可用(即時(shí)模塊的源代碼不可用,無論處于何原因)。將 DENO_DIR 環(huán)境變量指向項(xiàng)目中的本地目錄(例如 vendor),您可以將其提交給 Git。

例如,下面的命令會(huì)將腳本的所有依賴項(xiàng)下載到項(xiàng)目中的 vendor 目錄中。隨后,您可以提交該文件夾以在您的生產(chǎn)服務(wù)器中一次將其全部拉下。您還需要將 DENO_DIR 變量設(shè)置為從服務(wù)器上的 vendor 目錄中讀取,而不是重新下載它們。

$ DENO_DIR=$PWD/vendor deno cache index.ts # Linux and macOS
$ $env:DENO_DIR="$(get-location)\vendor"; deno cache index.ts # Windows PowerShell

Deno 還支持對依賴項(xiàng)進(jìn)行版本控制,以確??芍噩F(xiàn)的構(gòu)建。目前,我們已經(jīng)從 https://deno.land/x/oak/mod.ts 導(dǎo)入了 Oak。這始終會(huì)下載最新版本,將來可能與您的程序不兼容。當(dāng)你第一次下載模塊時(shí),它還會(huì)導(dǎo)致 Deno 產(chǎn)生警告:

Warning Implicitly using latest version (v9.0.1) for https://deno.land/x/oak/mod.ts

最佳實(shí)踐是引用一個(gè)特定版本,如下所示:

import { Application } from 'https://deno.land/x/oak@v9.0.1/mod.ts';

如果您在代碼庫的許多文件中引用一個(gè)模塊,升級它可能會(huì)變得乏味,因?yàn)槟仨氃谠S多地方更新 URL。為了規(guī)避這個(gè)問題,Deno 團(tuán)隊(duì)建議將您的外部依賴項(xiàng)導(dǎo)入到一個(gè)集中的 deps.ts 文件中,然后重新導(dǎo)出它們。這是一個(gè) deps.ts 示例文件,它從 Oak 庫中導(dǎo)出我們需要的內(nèi)容。

export { Application, Router } from "https://deno.land/x/oak@v9.0.1/mod.ts";

然后在您的應(yīng)用程序代碼中,您可以按如下方式導(dǎo)入它們:

import { Application, Router } from "./deps.ts";

此時(shí),更新一個(gè)模塊變得很簡單,只需將 deps.ts 文件中的 URL 更改為指向新版本即可。

標(biāo)準(zhǔn)庫

Deno 提供了標(biāo)準(zhǔn)庫(stdlib)旨在成為 Go 標(biāo)準(zhǔn)庫的松散端口(譯者注:這里原句為 “aims to be a loose port of Go's standard library”)。標(biāo)準(zhǔn)中包含的模塊由 Deno 團(tuán)隊(duì)審核并隨著每一次 Deno release 而更新。提供標(biāo)準(zhǔn)庫的目的是讓您立即創(chuàng)建有用的 Web 應(yīng)用程序,而不需要任何第三方包(這是 Node.js 生態(tài)系統(tǒng)中的規(guī)范)。

你可能會(huì)發(fā)現(xiàn)一些有幫助的第三方模塊,示例如下:

  • HTTP:Deno 的 HTTP 客戶端和服務(wù)端實(shí)現(xiàn)。
  • Fmt:包括用于打印格式化輸出的助手。
  • Testing:提供了用于代碼測試和基準(zhǔn)測試的基本實(shí)用工具。
  • FS:文件系統(tǒng)。
  • Encoding:提供處理各種文件格式的助手,例如 XML、CSV、base64、YAML、二進(jìn)制等。
  • Node: Node.js 標(biāo)準(zhǔn)可兼容層。

這是一個(gè)示例(取自 Deno 官方文檔)它取自 Deno 標(biāo)準(zhǔn)庫中的 HTTP 模塊用于創(chuàng)建一個(gè)基本的 Web Server。

import { listenAndServe } from "https://deno.land/std@0.109.0/http/server.ts";

const addr = ":8080";

const handler = (request: Request): Response => {
let body = "Your user-agent is:\n\n";
body += request.headers.get("user-agent") || "Unknown";

return new Response(body, { status: 200 });
};

console.log(`HTTP webserver running. Access it at: http://localhost:8080/`);
await listenAndServe(addr, handler);

通過以下命令開啟這個(gè)服務(wù):

$ deno run --allow-net index.ts
HTTP webserver running. Access it at: http://localhost:8080/

在不同終端,通過以下命令訪問這個(gè)正在運(yùn)行的服務(wù)。

$ curl http://localhost:8080
Your user-agent is:

curl/7.68.0

請注意,標(biāo)準(zhǔn)庫中的模塊當(dāng)前標(biāo)記為不穩(wěn)定(如版本號所示)。這意味著您不應(yīng)該僅僅依賴它們來進(jìn)行嚴(yán)肅的生產(chǎn)應(yīng)用程序。

在 Deno 中使用 NPM

不可否認(rèn) Node.js 成功的主要原因是可以在項(xiàng)目下載使用大量的 NPM 包。如果你正在考慮切換到 Deno,你也許想知道是否要放棄所有你知道且喜愛的 NPM 包。

最簡單的答案是 “不”。如果某些 NPM 包依賴于 Node.js API,您可能無法在 Deno 中使用它們(特別是如果 Deno 的 Node.js 兼容層不支持特定 API),但許多 NPM 包可以通過 CDN 在 Deno 中使用,例如 esm.sh 和 skypack.dev。這兩個(gè) CDN 都將 NPM 包作為 ES 模塊提供,即使包的作者沒有專門針對 Deno 進(jìn)行設(shè)計(jì),也可以隨后在 Deno 腳本中使用這些包。

這是一個(gè)在 Deno 腳本中從 Skypack 到入 NPM 包的示例:

import dayjs from "https://cdn.skypack.dev/dayjs@1.10.7";

console.log(`Today is: ${dayjs().format("MMMM DD, YYYY")}`);
$ deno run index.ts
Today is: October 05, 2021

為確保 Deno 可以發(fā)現(xiàn)與包關(guān)聯(lián)的類型,請確保在使用 Skypack CDN 時(shí)在包 URL 的末尾添加 ?dts后綴。這會(huì)使 Skypack 設(shè)置 X-TypeScript-Types 標(biāo)頭,以便 Deno 可以自動(dòng)發(fā)現(xiàn)與包關(guān)聯(lián)的類型。Esm.sh 默認(rèn)包含此標(biāo)頭,但您可以通過在包 URL 末尾添加 ?no-check 后綴來選擇退出。

import dayjs from "https://cdn.skypack.dev/dayjs@1.10.7?dts";

工具

Deno CLI 附帶了幾個(gè)有價(jià)值的工具,可以提高開發(fā)人員的使用體驗(yàn)。與 Node.js 一樣,它帶有一個(gè) REPL(交互式解析器),您可以使用 deno repl 訪問它。

$ deno repl
Deno 1.14.2
exit using ctrl+d or close()
> 2+2
4

它還有一個(gè)內(nèi)置的文件觀察器,可以與它的幾個(gè)子命令一起使用。例如,您可以使用 --watch 標(biāo)志將 deno run 配置為在文件更改后自動(dòng)重建和重新啟動(dòng)程序。在 Node.js 中,這個(gè)功能一般是通過一些第三方包來實(shí)現(xiàn)的,比如 nodemon。

$ deno run --allow-net --watch index.ts
HTTP webserver running. Access it at: http://localhost:8080/
Watcher File change detected! Restarting!
HTTP webserver running. Access it at: http://localhost:8080/

使用 Deno 1.6,您可以通過 compile 子命令將腳本編譯為不需要安裝 Deno 的獨(dú)立可執(zhí)行文件(您可以在 Node.js 中使用 pkg 執(zhí)行相同操作)。您還可以通過--target 標(biāo)志為其他平臺(交叉編譯)生成可執(zhí)行文件。編譯腳本時(shí),您必須指定其運(yùn)行所需的權(quán)限。

$ deno compile --allow-net --output server index.ts
$ ./server
HTTP webserver running. Access it at: http://localhost:8080/

請注意,通過此過程生成的二進(jìn)制文件非常龐大。在我的測試中,deno compile 為一個(gè)簡單的 “Hello world” 程序生成了一個(gè) 83MB 的二進(jìn)制文件。然而,Deno 團(tuán)隊(duì)目前正在努力減少文件大小以使其更易于管理。

發(fā)布 Deno 程序的另一種方法是通過 bundle 子命令將其打包到單個(gè) JavaScript 文件中。該文件包含程序的源代碼及其所有依賴項(xiàng),可以通過 deno run 執(zhí)行,如下所示:

$ deno bundle index.ts index.bundle.js
Check file:///home/ayo/dev/demo/deno/index.js
Bundle file:///home/ayo/dev/demo/deno/index.js
Emit "index.bundle.js" (7.39KB)

$ deno run --allow-net index.bundle.js
HTTP webserver running. Access it at: http://localhost:8080/

Deno 附帶的另外兩個(gè)很棒的工具是內(nèi)置的 linter (deno lint) 和 formatter (deno fmt)。在 Node.js 生態(tài)系統(tǒng)中,linting 和格式化代碼通常分別由 ESLint 和 Prettier 處理。

使用 Deno 時(shí),您不再需要安裝任何東西或編寫配置文件來獲取 JavaScript、TypeScript 和其他支持的文件格式的 linting 和格式化。

單元測試

Deno 內(nèi)置了對 JavaScript 和 TypeScript 代碼的單元測試支持。當(dāng)您運(yùn)行 deno test 時(shí),它會(huì)自動(dòng)檢測任何以 _test.ts 或 .test.ts 結(jié)尾的文件(也支持其他文件擴(kuò)展名)并在其中執(zhí)行任何定義的測試。

要編寫您的第一個(gè)測試,請創(chuàng)建一個(gè) index_test.ts 文件并使用以下代碼填充它:

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

Deno.test("Multiply two numbers", () => {
const ans = 2 * 2;
assertEquals(ans, 4);
});

Deno 提供了用于創(chuàng)建單元測試的 Deno.test 方法。它將測試的名稱作為其第一個(gè)參數(shù)。它的第二個(gè)參數(shù)是測試運(yùn)行時(shí)執(zhí)行的函數(shù)。

還有第二種風(fēng)格接受一個(gè)對象而不是兩個(gè)參數(shù)。除了測試名稱和功能之外,它還支持其他屬性來配置測試是否應(yīng)該運(yùn)行或如何運(yùn)行。

Deno.test({
name: "Multiply two numbers",
fn() {
const ans = 2 * 2;
assertEquals(ans, 4);
},
});

assertEquals() 方法來自標(biāo)準(zhǔn)庫中的測試模塊,它提供了一種輕松檢查兩個(gè)值是否相等的方法。

繼續(xù)運(yùn)行測試:

$ deno test
test Multiply two numbers ... ok (8ms)

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out (37ms)

Deno 語言服務(wù)協(xié)議

選擇編程語言或環(huán)境的主要考慮因素之一是它與編輯器和 IDE 的集成。在 Deno 1.6 中,內(nèi)置語言服務(wù)協(xié)議(deno lsp) 被添加到運(yùn)行時(shí)以提供以下功能:

  • 代碼自動(dòng)補(bǔ)全
  • 跳轉(zhuǎn)到定義處
  • 代碼 lint 和格式化集成

以及任何支持語言服務(wù)協(xié)議 (LSP) 的編輯器的其他語言智能。你可以在 Deno 的在線文檔中了解有關(guān)在編輯器中設(shè)置 Deno 支持的更多信息。

總結(jié):Deno 還是 Node.js ?

在本文中,我們考慮了 Deno 運(yùn)行時(shí)的許多方面,以及它是對 Node.js 的升級的方式。

關(guān)于 Deno 及其生態(tài)系統(tǒng)還有很多話要說,但對于考慮將 Deno 用于新項(xiàng)目的 Node.js 開發(fā)人員來說,這應(yīng)該是一個(gè)有用的介紹。Deno 第三方軟件包的可用性較低是它明顯不足的一個(gè)方面,因?yàn)樗诂F(xiàn)實(shí)世界中由于年齡太小而沒有像 Node.js 那樣經(jīng)過實(shí)戰(zhàn)測試(Deno 1.0 于 2020 年 5 月發(fā)布)。

比較 Node.js 和 Deno 之間的性能可以發(fā)現(xiàn),在大多數(shù)情況下,它們在同一個(gè)范圍內(nèi),盡管在少數(shù)情況下 Node.js 表現(xiàn)出更出色的性能。隨著 Deno 變得更加成熟,所測得的差異勢必會(huì)有所改善。

在選擇 Node.js 和 Deno 時(shí),同樣重要的是要記住,Deno 提供的一些好處也可以在第三方包的幫助下在 Node.js 中使用。因此,如果您對 Deno 只有一兩點(diǎn)欣賞,那么您很可能在 Node.js 中也可獲得類似的結(jié)果,盡管不是那么無縫。

譯者:五月君

作者:ayooluwa-isaiah

https://blog.appsignal.com/2022/02/09/an-introduction-to-deno-is-it-better-than-nodejs.html


分享名稱:Deno:它比Node.js更好嗎?
文章源于:http://m.5511xx.com/article/ccdpijh.html