热门问题
时间线
聊天
视角
Deno
以V8 JavaScript引擎與Rust程式語言為基礎開發的JavaScript與TypeScript執行時期環境 来自维基百科,自由的百科全书
Remove ads
Deno是基於V8引擎和Rust語言所建立的JavaScript、TypeScript、WebAssembly執行環境,由Node.js的原始開發者瑞安·達爾所創造[3]。達爾在2018年的演講「我爲Node.js感到後悔的十件事」中宣布了Deno[4]。Deno在單個可執行檔中扮演執行環境和套件管理系統的角色,不需要將其分開[5][6]。
Remove ads
歷史
Deno於2018年瑞安·達爾的演講「我爲Node.js感到後悔的十件事」中宣佈[4]。在這場演講中,達爾提到他後悔Node.js的設計,例如沒有在API中使用JavaScript的Promise、GYP建構系統、省略檔案的副檔名、node_modules與package.json、使用index.js進行模組解析、V8的沙盒環境等等[7]。他在演講的最後提出了Deno的原型,Deno旨在透過如Protocol Buffers之類的序列化工具傳遞訊息來實現綁定系統的呼叫,並提供命令列介面來存取控制。
Deno初始版本是使用Go語言編寫,並使用Protocol Buffers來實作特權(Go)與非特權(V8)之間的序列化[8]。然而因顧慮到雙重運行與垃圾蒐集,Go在不久後就被Rust取代[9]。
爲了讓Deno擁有非同步的事件觸發環境,Tokio也被引進來取代原本的libuv[10]。
Deno原本採用Flatbuffers以進行更快的零複製序列化與反序列化[11],在2019年4月發佈序列化的標準之後[12],2019年8月被移除[13]。
2018年11月建立了一個以Go標準函式庫爲基底的標準函式庫,並提供了廣泛的工具,解決部分Node.js的dependency問題。[14]
Deno於2020年5月13日正式發佈。[15]
Deno Deploy,受Cloudflare Workers[16]的啟發,於2021年6月23日釋出。[17] 於2022年5月4日宣布Beta 4改進了儀錶板並增加了計費功能。Deno Deploy預計在2022年第三季度正式釋出。[18]
Deno Fresh 1.0於2022年6月28日宣布。[19] 它是一個新的全棧Web框架,用於Deno,它不向客戶端傳送任何JavaScript。該框架沒有構建步驟,這使得部署時間可以提高一個數量級。1.1版本於2022年9月8日釋出。[20]
Deno SaaSKit beta於2023年4月4日宣布。[21] 它是一個開源的、現代的SaaS模板,使用Fresh和Deno構建。
Remove ads
概覽
Deno目標是成爲對目前的工程師來說最具有生產力的的指令碼環境[5]。Deno強調事件觸發架構,並提供一套非阻塞IO與阻塞IO。
Deno可用於建立網頁伺服器、執行數學的運算等等。
Deno與Node.js的相同之處:
Deno與Node.js的不同之處[5]:
範例
在這個JavaScript例子中,Hello [name]
的資訊被列印到控制台,代碼確保所提供的名字是大寫的。
命令: deno run hello-world.js
/**
* hello-world.js
*/
function capitalize(word) {
return word.charAt(0).toUpperCase() + word.slice(1);
}
function hello(name) {
return "Hello " + capitalize(name);
}
console.log(hello("john"));
console.log(hello("Sarah"));
console.log(hello("kai"));
/**
* Output:
*
* Hello John
* Hello Sarah
* Hello Kai
*/
Remove ads
在這個程式中,每個命令列參數都被假定為一個檔名,檔案被打開,並列印到stdout(例如控制台)。
/**
* cat.ts
*/
import { copy } from "https://deno.land/std@0.167.0/streams/conversion.ts";
for (const filename of Deno.args) {
const file = await Deno.open(filename);
await copy(file, Deno.stdout);
file.close();
}
執行該程式:
deno run --allow-read https://deno.land/std@0.167.0/examples/cat.ts /etc/passwd
webserver.ts:
import { serve } from "https://deno.land/std@0.167.0/http/server.ts";
const port = 8080;
const handler = (request: Request): Response => {
const body = `Your user-agent is:\n\n${
request.headers.get("user-agent") ?? "Unknown"
}`;
return new Response(body, { status: 200 });
};
console.log(`HTTP webserver running. Access it at: http://localhost:8080/`);
await serve(handler, { port });
然後用以下方式執行這個:
deno run --allow-net webserver.ts
Remove ads
融資
2021年3月29日,Deno Land Inc宣布成立,由Shasta Ventures、Mozilla 公司和其他一些公司提供數百萬美元的支援。它的成立是為了進一步發展 Deno 並為使用者提供商業服務。[22]
參考資料
外部鏈結
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads