Deno JavaScript プラットフォームは NPM モジュールと互換性があります

Deno 1.28 がリリースされました。これは、サーバー側ハンドラーの作成に使用できる JavaScript および TypeScript アプリケーションをサンドボックス化するためのフレームワークです。 このプラットフォームは、Node.js の作成者である Ryan Dahl によって開発されました。 Node.js と同様に、Deno は、Chromium ベースのブラウザでも使用されている V8 JavaScript エンジンを使用します。 同時に、Deno は Node.js のフォークではなく、ゼロから作成された新しいプロジェクトです。 プロジェクト コードは MIT ライセンスに基づいて配布されます。 ビルドは Linux、Windows、macOS 用に用意されています。

Deno プロジェクトは、ユーザーにより安全な環境を提供し、Node.js アーキテクチャの概念的なエラーを排除するために作成されました。 セキュリティを向上させるために、V8 エンジンは Rust で書かれており、低レベルのメモリ操作から生じる多くの脆弱性を回避しています。 ノンブロッキング モードでリクエストを処理するには、同じく Rust で書かれた Tokio プラットフォームが使用されます。 Tokio を使用すると、イベント駆動型アーキテクチャに基づいた高性能アプリケーションを作成でき、マルチスレッドをサポートし、非同期モードでネットワーク要求を処理できます。

新しいリリースの主な変更点は、NPM リポジトリでホストされているパッケージとの互換性の安定化であり、これにより Deno は Node.js プラットフォーム用に作成された 1.3 万を超えるモジュールを使用できるようになります。 たとえば、Deno ベースのアプリケーションは、Prisma、Mongoose、MySQL などの永続データ アクセス モジュールに加え、React や Vue などのフロントエンド フレームワークを使用できるようになりました。 一部の NPM モジュールは、たとえば package.json ファイルなどの Node.js 固有の環境要素へのバインドが原因で、依然として Deno と互換性がないままです。 また、NPM モジュールで「denocompile」コマンドを使用することもまだできません。 将来のリリースでは、これらの非互換性と制限に対処する予定です。

Deno が以前に使用していた ECMAScript モジュール システムと Web API モデルのサポートは同じレベルで維持され、Deno の使い慣れた URL ベースの読み込みスキームが NPM モジュールのインポートに使用されます。 NPM モジュールにアクセスするには、特別な URL プレフィックス「npm:」があり、通常の Deno モジュールと同じ方法で使用できます。 たとえば、NPM モジュールをインポートするには、「import {chalk } from "npm:chalk@5";」と指定し、コマンド ラインから NPM スクリプトを実行します - 「deno run --allow-env --allow」 -read npm:create-vite-extra。」

Deno での NPM パッケージの使用は、Node.js よりもはるかに簡単です。モジュールを事前にインストールする必要がなく (モジュールはアプリケーションの最初の起動時にインストールされます)、package.json ファイルがなく、デフォルトの node_modules もないためです。ディレクトリ (モジュールは共有ディレクトリにキャッシュされますが、「--node-modules-dir」オプションを使用して古い動作に戻すことができます)。

NPM ベースのアプリケーションは、Deno のアクセス制御、分離、およびセキュリティに配慮した高度な機能を使用する機能を保持します。 疑わしい依存関係による攻撃に対抗するために、Deno は依存関係からシステムにアクセスしようとするすべての試みをデフォルトでブロックし、検出された問題について警告を表示します。 たとえば、モジュールが /usr/bin/ への書き込みアクセスを取得しようとすると、この操作に対する確認リクエストが表示されます: deno run npm:install-malware ⚠️ ┌ Deno requested write access to /usr/bin/. § `install-malware` によって要求されました § --allow-write を指定して再度実行すると、このプロンプトがバイパスされます。 ━ 許可しますか? [y/n] (y = はい、許可; n = いいえ、拒否) >

新しいバージョンでの NPM 以外の改善には、V8 エンジンのリリース 10.9 への更新、ロックのあるファイルの自動検出、Deno.bench()、Deno.gid()、Deno.networkInterfaces()、Deno.systemMemoryInfo() の安定化が含まれます。 .uid()、コマンドを実行するための新しい不安定な API Deno.Command() を追加 (Deno.spawn、Deno.spawnSync、および Deno.spawnChild の汎用代替品)。

Denoの主な特徴:

  • セキュリティ指向のデフォルト構成。 ファイル アクセス、ネットワーク、環境変数へのアクセスはデフォルトで無効になっているため、明示的に有効にする必要があります。 デフォルトでは、アプリケーションは分離されたサンドボックス環境で実行され、明示的なアクセス許可を付与しない限りシステム機能にアクセスできません。
  • JavaScript を超えた TypeScript の組み込みサポート。 型チェックと JavaScript 生成には、標準の TypeScript コンパイラーが使用されるため、V8 の JavaScript 解析と比較してパフォーマンスが低下します。
  • ランタイムは、単一の自己完結型実行可能ファイル (「deno」) の形式で提供されます。 Deno を使用してアプリケーションを実行するには、プラットフォームに約 30 MB の実行可能ファイルを 8 つダウンロードするだけで済みます。このファイルには外部依存関係がなく、システムに特別なインストールを行う必要もありません。 さらに、deno はモノリシック アプリケーションではなく、個別に使用できる Rust クレート パッケージ (deno_core、rusty_vXNUMX) のコレクションです。
  • プログラムの起動時やモジュールのロード時に、URL アドレス指定を使用できます。 たとえば、welcome.js プログラムを実行するには、「deno https://deno.land/std/examples/welcome.js」コマンドを使用できます。 外部リソースからのコードはダウンロードされ、ローカル システムにキャッシュされますが、自動的に更新されることはありません (更新するには、「--reload」フラグを指定してアプリケーションを明示的に実行する必要があります)。
  • アプリケーションでの HTTP 経由のネットワーク リクエストの効率的な処理。プラットフォームは、高性能ネットワーク アプリケーションを作成するように設計されています。
  • Deno と通常の Web ブラウザの両方で実行できるユニバーサル Web アプリケーションを作成する機能。
  • モジュールの標準セットが存在し、その使用に外部依存関係へのバインドは必要ありません。 標準コレクションのモジュールは追加の監査と互換性テストを受けています。
  • ランタイムに加えて、Deno プラットフォームはパッケージ マネージャーとしても機能し、コード内の URL によってモジュールにアクセスできるようにします。 たとえば、モジュールをロードするには、コード内で「import * as log from “https://deno.land/std/log/mod.ts”」と指定できます。 URL 経由で外部サーバーからダウンロードされたファイルはキャッシュされます。 モジュールのバージョンへのバインドは、URL 内にバージョン番号を指定することによって決定されます (例: 「https://unpkg.com/」)。[メール保護]/dist/liltest.js";
  • この構造には、統合された依存関係検査システム (「deno info」コマンド) とコード フォーマット用ユーティリティ (deno fmt) が含まれています。
  • すべてのアプリケーション スクリプトを XNUMX つの JavaScript ファイルに結合できます。

出所: オープンネット.ru

コメントを追加します