ホームページ > ウェブフロントエンド > jsチュートリアル > node.js vs deno:知っておくべきこと

node.js vs deno:知っておくべきこと

Christopher Nolan
リリース: 2025-02-10 09:10:10
オリジナル
585 人が閲覧しました

Node.js vs Deno: What You Need to Know

デノは、そのリリース以来、JavaScriptコミュニティから広範囲にわたる注目を集めてきました。 Node Creatorsによって設計されたJavaScriptランタイムとして、これら2つのプロジェクトの間に多くの類似点が期待されるかもしれませんが、それは本当です。ただし、重要な違いもあります。つまり、他方を単に1つに置き換えることはできません。

この記事では、デノと「古いシニア」node.jsとの関係を調べて、それらが共通していることと異なるものを理解するのに役立ちます。 (最初にDenoのコアコンテンツについて知りたい場合は、最近の紹介記事をご覧ください。)

キーポイント

  • denoとnode.jsはどちらもJavaScriptのランタイムですが、大きな違いがあります。 DenoはTypeScriptの一流のサポートを提供します。つまり、コードをJavaScriptに変換するための追加のツールを必要とせずに、箱から出して作られます。ただし、node.jsでは、V8エンジンが実行できるJavaScriptコードにコードをコンパイルする必要があります。
  • DenoのAPIは、最新のJavaScript機能を活用し、すべての非同期方法の約束を返し、トップレベルの待ち望をサポートするように設計されています。一方、node.jsのAPIは、後方互換性を維持するためにコールバックが依然として必要です。 Denoはまた、コード実行のためのより安全なサンドボックス環境を提供し、許可が明示的に付与されない限り、ファイルシステム、ネットワーク、環境変数へのアクセスを制限します。
  • node.jsには、NPMレジストリで100万を超えるパッケージが利用できる大規模で多様なエコシステムがあります。 Denoは、パッケージマネージャーまたはレジストリの使用を避けるように設計されており、スクリプトがパブリックURLから直接モジュールをインポートできるようにします。ただし、この執筆時点で、Denoは707の互換性のあるサードパーティモジュールのみをリストしています。

言語サポート

両方のプロジェクトはJavaScript Runtimesであり、JavaScriptコードをコンピューターで(Webブラウザ以外で)実行できます。言語サポートの比較を見てみましょう。

node.js

Nodeの現在のLTSバージョン(この執筆時点でのV12.18.1)は、最新のJavaScriptの構文と機能をサポートしています。また、ES2020仕様の約75%をサポートしています。 ECMAScriptモジュールもサポートされていますが、現在は実験としてのみ分類されています。.mjsファイル拡張子を使用するか、プロパティ「タイプ」:「モジュール」をプロジェクトのpackage.jsonファイルに追加する必要があります。

ノードでTypeScript(またはその他の言語)を実行するには、V8エンジンが実行できるJavaScriptコードにコードをコンパイルする必要があります。これを行うにはいくつかの異なる方法があり、それぞれに長所と短所があるため、立ち上げて実行するには、そのいずれかを選択し、必要なセットアッププロセスに従う必要があります。

deno

DenoがサポートするJavaScriptの仕様については言及していませんでしたが、バックグラウンドでV8も使用しているため、Nodeのサポートレベルに似ていると思います。私自身のテストは、DenoがPromise.allsettled()やGlobalisキーワードなどのES2020機能をサポートしていることを示しています。 ECMAScriptモジュールはデフォルトであり、Node互換ライブラリを使用しない限り、CommonJSモジュールはサポートされていません(詳細については後で詳しく説明します)。

タイプスクリプトは、デノのファーストクラスの言語としてサポートされています。つまり、箱から出して使用できます。最初にJavaScriptに変換するために追加のツールをインストールする必要はありません。もちろん、V8エンジン自体はタイプスクリプトをネイティブにサポートしていないため、Denoは依然としてバックグラウンドでコードを変換しますが、これは開発者として完全にシームレスで透明です。

Deno V1.0.1に使用するTypeScriptのバージョンに関する情報も見つかりませんが、TS 3.7として配置できるオプションのチェーンとヌル値のマージ(プライベートクラスフィールドではありません)をサポートします。

api

DenoとNodeはどちらも開発者に独自のAPIを公開し、ファイルの読み取りや書き込みやネットワークリクエストの送信や受信などの有用な操作を実行できるプログラムを作成できるようにします。

node.js

ノードが最初にリリースされたとき、約束に対するサポートが組み込まれていませんでした。したがって、非同期操作のAPIのほとんどは、エラーファーストコールバックを使用して書かれています:

const fs = require('fs');
fs.readFile('readme.txt', (err, data) => {
  if (err) {
    // 处理错误
  }
  // 否则处理数据
});
ログイン後にコピー
ログイン後にコピー

ノード開発者がPromiseとAsync/Waing Syntaxを使用できるようになったとしても、APIは後方互換性を維持するためにコールバックを必要とします。

deno

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とノードの動作が非常に異なる分野です。デノはまだ初期段階にあるため、そのアプローチが有利であることが証明されるかどうかはまだ不明です。

node.js

ノードには、サードパーティパッケージのインストールと管理のためのNPMというパッケージマネージャーが付属していることがわかっている場合があります。 NPMは主にオンラインNPMレジストリで使用され、利用可能なサードパーティパッケージのほとんどがリストされています。

NPMを使用してプロジェクトにパッケージをインストールすると、Package.jsonファイルを使用して、パッケージ名と許容版の範囲を指定します。パッケージ自体(およびそれが依存するパッケージ)は、プロジェクト内のnode_modulesフォルダーにダウンロードされます。

deno

デノは、パッケージマネージャーの必要性を完全に排除します。代わりに、パッケージはURLを介して直接リンクされています:

import { Response } from "https://deno.land/std@0.53.0/http/server.ts";
ログイン後にコピー

コードを初めて実行したときに、Denoはすべての依存関係を取得してコンパイルします。その後、プロジェクトとは別にファイルシステムでキャッシュされるため、その後の実行はより速くなります。

NPMのpackage-lock.jsonファイルと同様に、DENOでは、依存関係のみが最初にインポートした正確なバージョンと一致するように使用されるロックファイルを指定できます。

サードパーティのパッケージ

言語の繁栄は、生産性がホイールを再発明する必要がないことに依存するため、その生態系の活力に依存します!ここでは、現時点ではノードが有利になっているようです。

node.js

ノードには、巨大で多様なライブラリとパッケージのエコシステムがあります。リリースから11年間で、NPMレジストリに100万を超えるパッケージが登録されています。もちろん、品質は大きく異なる場合があり、多くのパッケージは積極的に維持されなくなりましたが、これは依然としてノード開発者にとって大きな利点です。

deno

前のセクションで見たように、Denoはパッケージマネージャーまたはレジストリの必要性を積極的に回避しようとしており、スクリプトがパブリックURLから直接モジュールをインポートできるようにしています。もちろん、何があるのか​​わからない場合はパッケージをインポートするのは難しいので、Deno Webサイトは互換性のあるサードパーティモジュールのリストを維持しています。この執筆時点では、リストには707モジュールがあります。

denoの標準ライブラリ

DENO開発者エクスペリエンスを改善しようとする1つの方法は、標準的なライブラリにヘルパープログラムと一般的なタスクのユーティリティを提供することです。すべてのモジュールは、高品質で信頼性の高いコードを確保するために、コア開発者によってレビューされます。コマンドラインパラメーターとシェーディング端子出力を処理するためのモジュールがあります。どちらもノードのサードパーティパッケージとしてのみ使用できます。

安全

おそらく、ノード上のデノの最も宣伝されている改善の1つは、許可システムです。その理由を見てみましょう。

node.js

ノードランタイムは非常にゆるく、コードがコンピューターのネットワークとファイルシステムに完全にアクセスできるようにします。チェックされていない場合、サードパーティのコードはシステムに損傷を与える可能性があります。

deno

セキュリティモデルの改善は、ライアンダールがデノを設計するときに特にやりたかったことです。デフォルトでは、すべてのコードは安全なサンドボックス環境で実行されます。これにより、コマンドラインパラメーターを使用してアクセスが明示的に付与されない限り、コードがファイルシステム、ネットワーク、環境変数などのコンテンツにアクセスすることを防ぎます。

const fs = require('fs');
fs.readFile('readme.txt', (err, data) => {
  if (err) {
    // 处理错误
  }
  // 否则处理数据
});
ログイン後にコピー
ログイン後にコピー
さらに良いことに、ファイルシステムへの読み取りや書き込みを許可したり、ネットワークにアクセスしたりするときに、ホワイトリストを提供できます。つまり、DENOプログラムへの読み取り/書き込みアクセスをプロジェクトのデータフォルダーに制限できることを意味します。たとえば、潜在的な悪意のある腐敗を制限できます。

deno:独自のバッテリーが付属しています

最後に、もう一つのことについて話したいです。マニュアルのツールセクションを閲覧すると、Denoが私たちにいくつかの素晴らしい「追加機能」を提供してくれたことに気付くでしょう!開発エクスペリエンスをより良くすることができる組み込みツールは次のとおりです。
  • バンドラー:バンドラー指定されたスクリプトとその依存関係は単一のファイルに
  • に依存しています
  • デバッガー:Chrome Devtools、VSコード、およびその他のツールを使用してDenoプログラムのデバッグを許可します(注:ノードにはデバッガーも付属しています)
  • 依存要因:ESモジュールでこのコマンドを実行すると、すべての依存関係のツリー構造がリストされます
  • ドキュメントジェネレーター:特定のファイルにjsdocコメントを解析し、ドキュメントを出力します
  • Formatter:JavaScriptとTypeScriptコードを自動的にフォーマットします
  • テストランナー:これを使用してJSコードとTSコードをテストし、標準ライブラリのアサーションモジュールと組み合わせることができます
  • linter:プログラムの潜在的な問題を発見するのに役立つコードリンター(現在不安定)

結論

この記事の目的は、ノードまたはデノを宣伝することではなく、2つを比較して比較することです。ここで、これら2つのランタイムと、おそらくより重要なことに、それらの違いの間の類似性を理解する必要があります。

Denoは、強力な許可システムや一流のタイプスクリプトサポートなど、いくつかの特別な利点を開発者に提供します。設計上の決定と追加の組み込みツールは、効率的な環境と優れた開発者エクスペリエンスを提供するように設計されています。

一方、ノードには、10年以上にわたって開発されてきた巨大で完全なエコシステムがあります。これは、多くのドキュメントとチュートリアルと組み合わせることで、Node.jsを今後しばらく安全に選択できる可能性があります。

deno Basics

denoについてすぐに学びます。 Deno Basicsシリーズは、Denoの世界への最初の一歩を踏み出し、常にコンテンツを追加しています。専門家になるために必要なチュートリアルを提供します。デノプロファイルを更新した後、いつでもインデックスを参照できます:

➤デノの基本

node.jsおよびdeno faqs

node.jsとは何ですか? Node.jsは、ChromeのV8 JavaScriptエンジンに基づいて構築されたオープンソースのクロスプラットフォームJavaScriptランタイムです。開発者はサーバー側のJavaScriptを実行できるようになり、スケーラブルで高性能のWebアプリケーションを構築できます。

デノとは何ですか? 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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート