デノは、そのリリース以来、JavaScriptコミュニティから広範囲にわたる注目を集めてきました。 Node Creatorsによって設計されたJavaScriptランタイムとして、これら2つのプロジェクトの間に多くの類似点が期待されるかもしれませんが、それは本当です。ただし、重要な違いもあります。つまり、他方を単に1つに置き換えることはできません。
この記事では、デノと「古いシニア」node.jsとの関係を調べて、それらが共通していることと異なるものを理解するのに役立ちます。 (最初にDenoのコアコンテンツについて知りたい場合は、最近の紹介記事をご覧ください。)
両方のプロジェクトはJavaScript Runtimesであり、JavaScriptコードをコンピューターで(Webブラウザ以外で)実行できます。言語サポートの比較を見てみましょう。
Nodeの現在のLTSバージョン(この執筆時点でのV12.18.1)は、最新のJavaScriptの構文と機能をサポートしています。また、ES2020仕様の約75%をサポートしています。 ECMAScriptモジュールもサポートされていますが、現在は実験としてのみ分類されています。.mjsファイル拡張子を使用するか、プロパティ「タイプ」:「モジュール」をプロジェクトのpackage.jsonファイルに追加する必要があります。
ノードでTypeScript(またはその他の言語)を実行するには、V8エンジンが実行できるJavaScriptコードにコードをコンパイルする必要があります。これを行うにはいくつかの異なる方法があり、それぞれに長所と短所があるため、立ち上げて実行するには、そのいずれかを選択し、必要なセットアッププロセスに従う必要があります。
DenoがサポートするJavaScriptの仕様については言及していませんでしたが、バックグラウンドでV8も使用しているため、Nodeのサポートレベルに似ていると思います。私自身のテストは、DenoがPromise.allsettled()やGlobalisキーワードなどのES2020機能をサポートしていることを示しています。 ECMAScriptモジュールはデフォルトであり、Node互換ライブラリを使用しない限り、CommonJSモジュールはサポートされていません(詳細については後で詳しく説明します)。
タイプスクリプトは、デノのファーストクラスの言語としてサポートされています。つまり、箱から出して使用できます。最初にJavaScriptに変換するために追加のツールをインストールする必要はありません。もちろん、V8エンジン自体はタイプスクリプトをネイティブにサポートしていないため、Denoは依然としてバックグラウンドでコードを変換しますが、これは開発者として完全にシームレスで透明です。
Deno V1.0.1に使用するTypeScriptのバージョンに関する情報も見つかりませんが、TS 3.7として配置できるオプションのチェーンとヌル値のマージ(プライベートクラスフィールドではありません)をサポートします。
DenoとNodeはどちらも開発者に独自のAPIを公開し、ファイルの読み取りや書き込みやネットワークリクエストの送信や受信などの有用な操作を実行できるプログラムを作成できるようにします。
ノードが最初にリリースされたとき、約束に対するサポートが組み込まれていませんでした。したがって、非同期操作のAPIのほとんどは、エラーファーストコールバックを使用して書かれています:
const fs = require('fs'); fs.readFile('readme.txt', (err, data) => { if (err) { // 处理错误 } // 否则处理数据 });
ノード開発者がPromiseとAsync/Waing Syntaxを使用できるようになったとしても、APIは後方互換性を維持するためにコールバックを必要とします。
DenoのAPIは、最新のJavaScript機能を活用するように設計されています。すべての非同期方法は約束を返します。 Denoはまた、トップレベルの待望をサポートしています。つまり、メインスクリプトでAsync関数に包むことなく待ち望んでいることを意味します。
try { const data = await Deno.readFile('readme.txt'); // 处理数据 } catch (e) { // 处理错误 }
開発チームは、可能な限りWeb標準を使用することも決定しました。つまり、実用的にブラウザAPIを実装しました。 Denoは、AddEventListenerやFetchなどのグローバルウィンドウオブジェクトとAPIを提供します。ノードでは、これにはポリフィルライブラリまたはサードパーティライブラリを使用する必要があるため、フェッチへのアクセスは特に適しています。
denoは、既存のノードパッケージを再利用できるように設計された互換性レイヤーを提供します。まだ完了していませんが、現在、require()を介してcommonjsモジュールの読み込みをサポートしています。
パッケージ管理とは、Denoとノードの動作が非常に異なる分野です。デノはまだ初期段階にあるため、そのアプローチが有利であることが証明されるかどうかはまだ不明です。
ノードには、サードパーティパッケージのインストールと管理のためのNPMというパッケージマネージャーが付属していることがわかっている場合があります。 NPMは主にオンラインNPMレジストリで使用され、利用可能なサードパーティパッケージのほとんどがリストされています。
NPMを使用してプロジェクトにパッケージをインストールすると、Package.jsonファイルを使用して、パッケージ名と許容版の範囲を指定します。パッケージ自体(およびそれが依存するパッケージ)は、プロジェクト内のnode_modulesフォルダーにダウンロードされます。
デノは、パッケージマネージャーの必要性を完全に排除します。代わりに、パッケージはURLを介して直接リンクされています:
import { Response } from "https://deno.land/std@0.53.0/http/server.ts";
コードを初めて実行したときに、Denoはすべての依存関係を取得してコンパイルします。その後、プロジェクトとは別にファイルシステムでキャッシュされるため、その後の実行はより速くなります。
NPMのpackage-lock.jsonファイルと同様に、DENOでは、依存関係のみが最初にインポートした正確なバージョンと一致するように使用されるロックファイルを指定できます。言語の繁栄は、生産性がホイールを再発明する必要がないことに依存するため、その生態系の活力に依存します!ここでは、現時点ではノードが有利になっているようです。
ノードには、巨大で多様なライブラリとパッケージのエコシステムがあります。リリースから11年間で、NPMレジストリに100万を超えるパッケージが登録されています。もちろん、品質は大きく異なる場合があり、多くのパッケージは積極的に維持されなくなりましたが、これは依然としてノード開発者にとって大きな利点です。
denoの標準ライブラリ
安全
node.js
deno
const fs = require('fs'); fs.readFile('readme.txt', (err, data) => { if (err) { // 处理错误 } // 否则处理数据 });
deno:独自のバッテリーが付属しています
この記事の目的は、ノードまたはデノを宣伝することではなく、2つを比較して比較することです。ここで、これら2つのランタイムと、おそらくより重要なことに、それらの違いの間の類似性を理解する必要があります。
Denoは、強力な許可システムや一流のタイプスクリプトサポートなど、いくつかの特別な利点を開発者に提供します。設計上の決定と追加の組み込みツールは、効率的な環境と優れた開発者エクスペリエンスを提供するように設計されています。
一方、ノードには、10年以上にわたって開発されてきた巨大で完全なエコシステムがあります。これは、多くのドキュメントとチュートリアルと組み合わせることで、Node.jsを今後しばらく安全に選択できる可能性があります。deno Basics
➤デノの基本
node.jsおよびdeno faqs
デノとは何ですか? Denoは、V8エンジンに基づいて構築されたJavaScriptとTypeScriptの安全なランタイムです。 Node.jsを最初に開発した同じ人(Ryan Dahl)によって作成されました。デノは、node.jsの設計上の欠陥とセキュリティの問題を解決することを目指しています。
アーキテクチャの観点からnode.jsとdenoの違いは何ですか? node.jsはコールバックベースの非同期モデルを使用しますが、Denoは非同期コードなどの最新の機能を使用して、非同期コードを読みやすくしやすくします。 Node.jsと比較して、Denoには、よりモジュール式および分散化されたアーキテクチャもあります。
node.jsとdenoの主なセキュリティの違いは何ですか? Denoはセキュリティファーストアプローチを採用しています。つまり、ファイルシステム、ネットワーク、およびその他の潜在的に危険な操作へのアクセスをデフォルトで制限します。代わりに、node.jsはよりゆるいモデルを採用し、開発者はセキュリティ設定を手動で管理する必要があります。
denoはnode.jsモジュールを実行できますか? Denoは、Webプラットフォームと互換性があるように設計されており、独自のモジュールシステムを備えています。変更されたnode.jsモジュールを実行できますが、一般的にDenoネイティブモジュールを使用して、より良い互換性とセキュリティを使用することをお勧めします。
node.jsとdenoはタイプスクリプトをどのようにサポートしていますか? node.jsとdenoの両方のサポートタイプスクリプト。 node.jsでは、開発者は通常、個別のタイプスクリプトコンパイルステップを設定する必要がありますが、Denoはタイプスクリプトをネイティブにサポートし、追加の構成なしでタイプスクリプトコードを直接実行できます。
以上がnode.js vs deno:知っておくべきことの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。