ホームページ > ウェブフロントエンド > jsチュートリアル > Denoモジュール:使用、ベストプラクティス、ノードモジュールのインポート

Denoモジュール:使用、ベストプラクティス、ノードモジュールのインポート

Joseph Gordon-Levitt
リリース: 2025-02-12 08:33:10
オリジナル
582 人が閲覧しました

Deno Modules: Usage, Best Practices & Node Module Imports

denoモジュールを掘る - node.jsから来ている場合、これはあなたが遭遇する最大のワークフローの変更になります。それらがどのように機能し、それらを最適に使用する方法、node.jsモジュールとNPMパッケージをDenoで使用する方法などを学びます。

node.jsは、Ryan Dahlによって開発され、2009年にリリースされたChrome V8エンジンに基づくJavaScriptランタイムです。

Denoは、Ryan Dahlによって開発され、2020年にリリースされたChrome V8エンジンに基づくJavaScriptランタイムでもあります。 10年の経験に基づいて作成されています。これは、必ずしもnode.jsの続編であるか、より高度な代替手段であることを意味するわけではありませんが、node.jsのパスから逸脱します。

参照:

  • デノコンテンツインデックスを含むデノガイド(最後までスクロール)
  • Node.js対denoの比較、および特定の状況に合ったツールを選択するためのガイド
主な違い:Denoは、タイプスクリプト、セキュリティ、テスト、ブラウザAPIをネイティブにサポートしています。モジュール処理はあまり注目されていませんが、JavaScriptアプリケーションの作成方法の最大の変更である可能性があります。デノについて話し合う前に、より単純な時代にあなたを連れ戻しましょう...

キーポイント

    denoは、typescript、セキュリティ、テスト、ブラウザAPIをネイティブにサポートすることにより、node.jsから逸脱するChrome V8エンジンに基づくJavaScriptランタイムです。また、commonJSを使用してnode.jsとは異なり、絶対的または相対的なURLからインポートされるES2015モジュールを使用することも選択します。
  • denoにはnode.jsにnpmのようなパッケージマネージャーがいません。代わりに、スクリプト内のモジュールのURLに最初に遭遇すると、グローバルディレクトリにダウンロードしてキャッシュします。つまり、多くのプロジェクトがそれを参照しても、特定のモジュールバージョンのコピーのみが必要です。
  • DENOでは、特定のコードバージョンを参照できるようにモジュールURLのバージョン化を許可します。また、単一の依存関係ファイルを使用してプロジェクトで使用される各モジュールのインポート、またはインポートマップを使用してフルまたは部分URLに名前を割り当てることもサポートします。
  • プラットフォームにはセキュリティが組み込まれており、ファイルシステムとネットワークアクセスを制限し、整合性チェックオプションを提供します。また、特別な処理なしでnode.jsとdenoで実行されるnode.js APIおよびクロスプラットフォームモジュールの使用もサポートしており、JavaScriptランタイムエコシステムがより一般的であることを進化させ続けるにつれて、そのようなモジュールはますます人気になる可能性があります。
node.jsモジュール

2009年、JavaScriptには標準モジュールシステムがありませんでした。これの一部は、ブラウザの背景が原因で、ES6/ES2015が表示されるまでに数年かかります。

node.jsは、モジュールを提供しない場合は想像できないため、コミュニティのいくつかの回避策からcommonjsを採用します。これにより、Node Package Manager(NPM)の開発につながりました。これにより、開発者は独自のJavaScriptモジュールを簡単に検索、使用、公開できます。

NPMの使用は指数関数的に増加しています。これは史上最も人気のあるパッケージマネージャーになり、2020年半ばまでに1日800を超える新しい追加を備えた150万近くのモジュールをホストしました(出典:modulecounts.com)。

denoモジュール

deno select es2015モジュールを使用します。これは、絶対的または相対的なURLからインポートできます。

このURLのスクリプトは、それに応じて関数またはその他の値をエクスポートする必要があります。
<code>import { something } from 'https://somewhere.com/somehow.js';
</code>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

Denoは、最新のWebブラウザーで実装されているのと同じモジュールシステムを使用します。

<code>export function something() {
  console.log('something was executed');
}
</code>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
node.jsはES2015モジュールもサポートしています...しかし、これは複雑で実験的です。 CommonJSとES2015モジュールは似ていますが、異なって動作します:

CommonJSは、コードを実行するときに必要に応じて、ファイルシステムから依存関係をロードします。

    ESモジュールは、コードを実行する前にさらにインポートを解決するためにURLから事前にパージします。
  • node.jsは、commonjsを引き続きサポートし、混合ESモジュールを処理する必要があります。したがって、それは次のとおりです
  • .cjsで終了するファイルは、commonjs
を使用します .mjsで終了するファイルは、ESモジュールを使用します

.jsで終了するファイルは、最新のpackage.jsonが「型」:「モジュール」を設定しない限り、commonjsです。

  1. Denoが単一の標準モジュールシステムを選択した理由を理解できます。ただし、NPMはNodeの成功において重要な要素であるため、Denoがキャンセルしたことは驚くべきことです。
  2. パッケージマネージャーなし。
  3. NPMに対する批判の1つは、各プロジェクトのnode_modulesディレクトリの大規模です。モジュールは他のモジュールの特定のバージョンを必要とするため、サイズが数百メガバイトに到達する可能性があります。

DENOは、スクリプト内のモジュールのURLに初めて遭遇したときに、グローバルディレクトリにダウンロードしてキャッシュします。したがって、いくつのプロジェクトがそれを参照しても、特定のモジュールバージョンのコピーのみが必要です。

私はあなたが考えていることを知っています:「ああ、でも...」

…しかし、デノには、モジュールURLによって提起された問題を解決するオプションがあります。

信頼できないurl

Deno Modules: Usage, Best Practices & Node Module Imports URLは、一時的に失敗したり、変更したり、永久に消えたりする場合があります。これはどのパッケージマネージャーにとっても問題であり、NPMは過去にも問題が発生しています(URLからのインストールも許可しています)。

critical node.jsアプリケーションの場合、node_modulesディレクトリをプロジェクトのGit/その他のリポジトリに追加することをお勧めします。

Denoは同様のオプションをサポートしています。 deno_dir環境変数を現在のプロジェクトのディレクトリパスに設定できます。

Windows CMDで使用されている

またはWindows PowerShell:

アプリケーションが実行されると、Denoはモジュールをそのディレクトリにキャッシュして、プロジェクトのソースコントロールリポジトリに追加できるようにします。

<code>DENO_DIR=~/myproject/deno_modules`
</code>
ログイン後にコピー
ログイン後にコピー
依存関係を単一のJavaScriptまたはTypeScriptファイルにバンドリングすることも検討する場合があります。 Deno Bundleコマンドは1つのステップでこれを行うことができます:

ここで、myscript.jsは通常、deno runを使用して実行されるエントリスクリプトです。生成されたスタンドアロンmyscript.bundle.jsファイルは、リアルタイムサーバーに展開できます。
<code>> set DENO_DIR="C:\myproject\deno_modules"
</code>
ログイン後にコピー
ログイン後にコピー
トップのバンドルが待っています

Denoはトップレベルの待ち望をサポートしています。匿名の非同期関数で待望のコールをラップする必要はありません。残念ながら、トップレベルの待機がバンドルで失敗するため、ラッパー関数を追加する必要があります。これは既知の問題であり、将来のリリースで修正されます。

last:DENO、GITHUB、またはBITBUCKET URLは、一般的に安全です。

モジュールバージョンコントロール

理想的には、特定のコードバージョンを参照できるように、モジュールURLをバージョンにする必要があります。たとえば、DENO標準ライブラリを使用すると、特定のバージョンのHTTPサーバーモジュールをロードできます。

マスターブランチを参照することもできます:
<code>import { something } from 'https://somewhere.com/somehow.js';
</code>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

しかし、これにより最新バージョンがダウンロードされ、将来のバージョンはアプリケーションと互換性がない場合があります。
<code>export function something() {
  console.log('something was executed');
}
</code>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

同様のバージョン制御コンベンションを使用して、独自のサーバーにDenoモジュールを公開できますが、より人気が高まるにつれて、ウェブサイトが多くのトラフィックを受け取る可能性があります。より信頼できる方法は、GitHubなどのサービスのリポジトリを使用し、各バージョンにGitタグを割り当てることです。 denopkg.comやunpkg.comなどのサービスを使用して、公開バージョンモジュールURLを提供できます。

複数のモジュールが

に言及しています

アプリケーションコードベースの多くのファイルで同じモジュールURLを参照する必要がある場合があります。モジュールを更新する場合は、複数の場所でURLを変更する必要があります。検索と交換は機能しますが、それは不器用でエラーが発生しやすく、競合の合併の可能性を高めます。

または、プロジェクトで使用される各モジュールをインポートする単一の依存関係ファイルを使用できます。通常、deps.jsまたはdeps.ts:

という名前です

その後、他のプロジェクトファイルでdeps.jsからdenoモジュールを参照できます。
<code>DENO_DIR=~/myproject/deno_modules`
</code>
ログイン後にコピー
ログイン後にコピー

モジュールが更新された場合、deps.jsで単一のURL参照を変更するだけでいいです。

<code>> set DENO_DIR="C:\myproject\deno_modules"
</code>
ログイン後にコピー
ログイン後にコピー
別のオプションは、マップをインポートすることです。これは小さなJSONファイルで、通常はImport_map.jsonという名前で、名前を完全または部分的なURLに割り当てます。

スクリプトのインポートマップ名を参照できます:

<code>> $env:DENO_DIR="C:\myproject\deno_modules"
</code>
ログイン後にコピー
次に、deno runでアプリケーションを実行するときは、JSONファイルをインポートします。

インポートマップは現在不安定な関数であるため、UNSTABLEフラグが必要です。この機能は、将来のDenoバージョンで変更される可能性があります。
<code>deno bundle myscript.js myscript.bundle.js</code>
ログイン後にコピー

調査の完全性

<code>import { serve } from 'https://deno.land/std@0.61.0/http/server.ts';
</code>
ログイン後にコピー
URLから参照されているコードは、知らないうちに変更またはハッキングされる場合があります。有名なWebサイトは、サードパーティのクライアントコードに直接リンクするため、ハッキングされています。スクリプトがサーバーリソースにアクセスできる場合、それがどれだけの損傷を引き起こすか想像してみてください。

denoにはセキュリティが組み込まれているため、ファイルシステムとネットワークアクセスを制限するために、-allow-readや-allow-netなどのフラグを使用してスクリプトを実行する必要があります。これはいくつかの問題を防ぐのに役立ちますが、これはモジュールの整合性を検証するための代替ではありません!

denoは、整合性チェックオプションを提供します。 (上記のように)単一の依存関係ファイルを使用する場合、それは最も簡単です:

次のDENOコマンドは、すべてのインポートされたデノモジュールのチェックサムを含むlock.jsonファイルを生成します:
<code>import { something } from 'https://somewhere.com/somehow.js';
</code>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

別の開発者がプロ​​ジェクトをクロームすると、各モジュールをリロードし、各モジュールの整合性を確認して、モジュールと同じであることを確認できます。

<code>export function something() {
  console.log('something was executed');
}
</code>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
denoは整合性チェックを実施しません。これらのプロセスを自動化されたGitフックまたは同様の操作として実行することをお勧めします。

Node.jsモジュールを使用して

多くのnode.js apiがdenoにコピーされています - deno.land/std/nodeを参照してください。これは完全なリストではありませんが、一般的なファイル、イベント、バッファ、ユーティリティモジュールがあります。

800人近くのサードパーティのデノモジュールのコレクションは、

deno.land/xで提供されています。 Express.js、データベースドライバー、暗号化関数、コマンドラインツールなどに似たフレームワークがあります。

Awesome Denoなどの一般的なモジュールの選択リストもあります。

ただし、150万node.jsモジュールのいずれかをインポートできる場合があります。いくつかのCDNは、NPM/CommonJSパッケージをES2015モジュールURLに変換できます。

skypack.dev

jspm.org
  • unpkg.com
  • (urlにモジュールクエリ文字列を追加) 必要なモジュールがDenoで適切に機能するかどうかは別の問題です。
  • 幸いなことに、JavaScriptランタイムエコシステムが進化し続けるにつれて、node.jsおよびdenoで実行されるクロスプラットフォームモジュールが特別な処理なしで実行される可能性があります。
  • その他のモジュールの質問

モジュールのURLを参照することは議論の余地があり、非常に人気のあるNPMの人にとっては、邪魔になる可能性があります。つまり、DenoはJavaScriptモジュールの使用を簡素化します。 ES2015モジュールの多くの潜在的な副作用を緩和しながら、いくつかのNPM批判に対処します。

しかし、これは完璧とはほど遠いです。

NPMモジュールを簡単に公開するのは簡単で、npmjs.comを簡単に検索することもできます。検索用語は500回の結果を返す場合がありますが、人気、品質、メンテナンス要因によってパッケージをランキングすることにより、選択麻痺を最小限に抑えることができます。

コードをデノのサードパーティモジュールのリストに送信することは困難です。モジュールは自動テストに合格する必要がありますが、品質を保証することはできず、検索結果はアルファベット順に配置されます。モジュールの数が数千に達すると、既存のシステムが持続する可能性は低い。 NPMでパッケージを簡単に更新することもできます。 npmを古くて実行して更新リストを表示するか、package.jsonでゆるいバージョン番号を参照するときにNPMインストールを実行するだけです。

DENOには同等の更新チェックオプションはありません。 TREX、Update Deno依存関係、Deno-Check-Updatesなど、パッケージマネージャーのようなプロジェクトがありますが、これらのプロジェクトは通常、マップのインポートに依存しており、常にセマンティックバージョンのURLに依存しています。

デノに切り替える必要がありますか?

node.jsは死ななかった。成熟しており、モジュール、テクノロジー、ドキュメント、ランタイムで10年の経験があります。

denoはこの知識のほとんどを使用していますが、それは非常に新しいものであり、今後数年間で急速に発展するでしょう。大規模なアプリケーションでは時期尚早かもしれませんが、小規模プロジェクトでは、リスクは低くなります。すでにタイプスクリプトまたは他の言語から出している人は、はるかに簡単な体験を楽しむかもしれませんが、node.js開発者はdenoに変換してから戻ることは困難ではありません。

しかし、デノには興味深い利点があります:

  • そのモジュールシステムは、クライアントJavaScript
  • と同じです
  • 多くのブラウザAPIを実装しています。ウィンドウオブジェクトを参照したり、イベントリスナーを設定したり、Webワーカーを開始したり、Fetch()APIを使用してリモートサーバー要求を作成したりできます。

クライアントまたはサーバーのいずれかで機能する同型JavaScriptライブラリの夢は、大きな前進です。

deno Basics

denoについてすぐに学びます。デノの基本のコレクションは、デノの世界とそれ以降に最初の一歩を踏み出すのに役立ち、それにコンテンツを追加し続けます。専門家になるために必要なチュートリアルを提供します。デノの最後にいつでもインデックスを更新することができます。

➤デノの基本

デノモジュール

に関するよくある質問

デノモジュールとは何ですか? DenoモジュールはDenoのコードユニットであり、JavaScriptとTypeScriptの安全なランタイムです。 DENOのモジュールは、node.jsおよびES6モジュールのCommonJSモジュールと最新のJavaScriptのモジュールに似ています。開発者は、コードを再利用可能なカプセル化されたブロックに分割することにより、コードを整理して共有できます。

デノでモジュールを作成する方法は?デノでモジュールを作成するのは簡単です。新しいファイル(module.tsなど)を作成し、関数またはクラスを定義してから、エクスポートキーワードを使用してエクスポートできます。他のDenoスクリプトは、これらのモジュールをインポートおよび使用できます。

デノでモジュールをインポートする方法は?デノでモジュールをインポートするには、インポートキーワードを使用して、モジュールのパスまたはURLが続くことができます。 Denoは、ローカルおよびリモートの輸入品をサポートしています。

デノでサードパーティモジュールを使用できますか?はい、DenoはURLから直接モジュールのインポートをサポートしており、パッケージレジストリまたはGitHubリポジトリでホストされているサードパーティモジュールを使用できます。

以上がDenoモジュール:使用、ベストプラクティス、ノードモジュールのインポートの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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