目次
Deno とは何ですか?またその主な機能は何ですか?
セキュリティ (権限管理)
モジュールのメカニズム
万一存放引用的站点挂了咋办?
只能使用URL来引用模块吗?
如何进行版本管理
浏览器兼容性
支持TypeScript开箱即用
总结
ホームページ ウェブフロントエンド jsチュートリアル デノって何? Node.jsとの違いは何ですか?

デノって何? Node.jsとの違いは何ですか?

Jun 24, 2021 am 11:28 AM
node

Deno は Node の固有の問題を解決するために作成されました。では、Node.js との違いは何ですか?次の記事では、Deno について詳しく説明し、Deno と Node.js の違いを紹介します。

デノって何? Node.jsとの違いは何ですか?

[推奨学習: 「nodejs チュートリアル 」]

Node.js の作者である Ryan Dahl は、過去に1 年半 彼らは皆、Node に固有の問題のいくつかを解決するために、新しい JavaScript 実行環境 Deno を構築しています。

しかし、誤解しないでください。JavaScript の巨大なコミュニティ エコシステムと使用範囲のおかげで、Node は非常に優れた JavaScript 実行環境です。ただし、Dahl 氏は、セキュリティ、モジュール メカニズム、依存関係管理など、Node にはより包括的に考慮する必要がある側面がいくつかあることも認めました。

彼の計画では、Deno が短期間でどれだけ大きなプラットフォームに成長できるかは予測していませんでした。もちろん、2009 年に遡ると、JavaScript はまだ誰もがからかうことのできる奇妙な小さな言語であり、現在ほど多くの言語機能はありませんでした。

Deno とは何ですか?またその主な機能は何ですか?

Deno は、Google V8 エンジン上に構築された安全な TypeScript ランタイム環境です。 以下は、Deno を構築するための資料の一部です:

  • Rust (Deno のコア モジュールは Rust で書かれ、Node のコア モジュールは C で実装されます)
  • Tokio (Rust で実装された非同期プログラミング)フレームワーク)
  • TypeScript (Deno はすぐに使える JavaScript と TypeScript の両方をサポートします)
  • V8 (Google によって作成された JavaScript ランタイム、主に Chrome と Node で使用されます)

次に、Deno が提供する機能を見てみましょう。

セキュリティ (権限管理)

Deno の最も重要な機能はセキュリティです。

Node と比較すると、Deno はデフォルトでサンドボックス環境を使用してコードを実行します。これは、実行環境には次のモジュールを操作する権限がないことを意味します:

  • ファイル システム
  • ネットワーク
  • 他のスクリプトの実行
  • システム環境変数

Deno の権限システムがどのように機能するかを見てみましょう。

(async () => {
 const encoder = new TextEncoder();
 const data = encoder.encode('Hello world\n');

 await Deno.writeFile('hello.txt', data);
 await Deno.writeFile('hello2.txt', data);
})();
ログイン後にコピー

このスクリプトは、hello.txthello2.txt という名前の 2 つのファイルをそれぞれ作成し、その中に Hello world## を書き込みます。ただし、このコードはサンドボックス環境で実行されるため、ファイル システムを操作する権限がありません。

また、上記のスクリプトでは、Node の

fs モジュールを使用するのとは異なり、ファイルの操作に Deno 名前空間を使用していることにも注目してください。 Deno 名前空間は、多くの基本的なメソッドを提供します。ただし、Deno 名前空間を使用すると、コードとブラウザーとの互換性が失われます。この問題については後ほど説明します。

次のコマンドを使用して上記のスクリプトを実行します:

$ deno run write-hello.ts
ログイン後にコピー

実行後、次のプロンプトが表示されます:

Deno requests write access to "/Users/user/folder/hello.txt". Grant? [a/y/n/d (a = allow always, y = allow once, n = deny once, d = deny always)]
ログイン後にコピー

実際には、上記のファイルでは、サンドボックス環境から 2 つの許可プロンプトを受け取ります。ただし、

allow always オプションを選択した場合、尋ねられるのは 1 回だけです。

deny を選択すると、PermissionDenied というエラーが発生し、エラー処理ロジックを記述しないと、この時点でプロセスが終了してしまいます。

次のコマンドでスクリプトを実行すると、

deno run --allow-write write-hello.ts
ログイン後にコピー

はプロンプトを表示せずにこれら 2 つのファイルを作成します。

Deno のファイル システム用コマンド ライン フラグには、

--allow-write に加えて、--allow-net/-- もあります。 allow-env/--allow-run は、それぞれネットワーク、システム環境変数、および動作中のサブプロセスの権限を有効にするために使用されます。

モジュールのメカニズム

Deno はブラウザと同じ方法を使用して、URL を通じてモジュールをロードします。サーバー上の import ステートメント内の URL を初めて見ると、多くの人は少し混乱するでしょうが、私にとっては非常に簡単に理解できます。

import { assertEquals } from "https://deno.land/std/testing/asserts.ts";
ログイン後にコピー

導入するとどうなると思いますかURL 経由でモジュールを入手する? それは大したことですか?答えは実際には非常に簡単です: URL を使用してモジュールをロードすることで、Deno はパッケージを公開するための

npm のような集中型システムの導入を回避できます。npm は最近多くの苦情を受けています。## #。 URL を通じてコードを導入すると、パッケージ作成者は好みの方法でコードを保守および公開できます。 package.json

node_modules はもう必要ありません。 アプリケーションを開始すると、Deno はすべての参照ファイルをダウンロードし、ローカルにキャッシュします。参照がキャッシュされると、--relaod

フラグを使用して再ダウンロードをトリガーしない限り、Deno はそれらを再度ダウンロードしません。

議論する価値のある問題がまだいくつかあります:

万一存放引用的站点挂了咋办?

由于没有了一个中心化的包管理站点,那些存放模块的站点可能因为各种各样的原因挂掉。如果在开发甚至生产环境出现这种情况是非常危险滴!

我们在上一节提到,Deno会缓存好已下载的模块。由于缓存是存放在我们的本地磁盘的,Deno的作者建议将这些缓存提交到代码仓库里。这样一来,即使存放引用的站点挂了,开发者们还是可以使用已经下载好的模块(只不过版本是被锁住的啦)。

Deno会把缓存存储在环境变量$DENO_DIR所指定的目录下,如果我们不去设置这个变量,它会指向系统默认的缓存目录。我们可以把$DENO_DIR指定我们的本地仓库,然后把它们提交到版本管理系统中(比如:git

只能使用URL来引用模块吗?

总是敲URL显得有点XX,还好,Deno提供了两种方案来避免我们成为XX。

第一种,你可以在本地文件中将已经引用的模块重新export出来,比如:

export { test, assertEquals } from "https://deno.land/std/testing/mod.ts";
ログイン後にコピー

假如上面这个文件叫local-test-utils.ts。现在,如果我们想再次使用test或者assertEquals方法,只需要像下面这样引用它们:

import { test, assertEquals } from './local-test-utils.ts';
ログイン後にコピー

看得出来,是不是通过URL来引用它们并不是最重要的啦。

第二种方案,建一个引用映射表,比如像下面这样一个JSON文件:

{
   "imports": {
      "http/": "https://deno.land/std/http/"
   }
}
ログイン後にコピー

然后把它像这样import到代码里:

import { serve } from "http/server.ts";
ログイン後にコピー

为了让它生效,我们还需要通过--importmap标志位让Deno来引入import映射表:

$ deno run --importmap=import_map.json hello_server.ts
ログイン後にコピー

如何进行版本管理

版本管理必须由包作者来支持,这样在client端可以通过在URL中设置版本号来下载:https://unpkg.com/liltest@0.0.5/dist/liltest.js

浏览器兼容性

Deno有计划做到兼容浏览器。从技术上讲,在使用ES module的前提下,我们不需要使用任何类似webpack的打包工具就能在浏览器上运行Deno代码。

不过呢,你可以使用类似Babel这样的工具可以把代码转化成ES5版本的JavaScript,这样可以兼容那些不支持所有最新语言特性的低版本浏览器中,带来的后果就是最终文件里有很多不是必须的冗余代码,增大代码的体积。

结果取决于我们的主要目的是啥。

支持TypeScript开箱即用

不需要任何配置文件就能在Deno中轻易地使用TypeScript。当然咯,你也可以编写纯JavaScript代码,并使用Deno去执行它。

总结

Deno,作为一个新的TypeScript和JavaScript的运行环境,是一个非常有趣的技术项目,并且至今已经稳定发展了一段时间。但是距离在生产环境中去使用它还有比较长的一段路要走。

通过去中心化(或者翻译成分布式?)的机制,把JavaScript生态系统从npm这样中心化的包管理系统中解放了出来。

Dahl希望在这个夏天快结束的时候能够发布1.0版本,所以如果你对Deno未来的新进展感兴趣的话,可以给它个star

最后还有一个日志系统的广告,大家可以去原文查看。

英文原文地址:https://blog.logrocket.com/what-is-deno/

更多编程相关知识,请访问:编程视频!!

以上がデノって何? Node.jsとの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

nvmでノードを削除する方法 nvmでノードを削除する方法 Dec 29, 2022 am 10:07 AM

nvm でノードを削除する方法: 1. 「nvm-setup.zip」をダウンロードして C ドライブにインストールします; 2. 「nvm -v」コマンドで環境変数を構成し、バージョン番号を確認します; 3. 「nvm」を使用しますinstall" コマンド ノードのインストール; 4. "nvm uninstall" コマンドでインストールしたノードを削除します。

Express を使用してノード プロジェクトでファイルのアップロードを処理する方法 Express を使用してノード プロジェクトでファイルのアップロードを処理する方法 Mar 28, 2023 pm 07:28 PM

ファイルのアップロードをどのように処理するか?次の記事では、Express を使用してノード プロジェクトでファイルのアップロードを処理する方法を紹介します。

NodeサービスのDockerミラーリングを行うにはどうすればよいですか?極限最適化の詳しい説明 NodeサービスのDockerミラーリングを行うにはどうすればよいですか?極限最適化の詳しい説明 Oct 19, 2022 pm 07:38 PM

この期間中、私は Tencent ドキュメントのすべてのカテゴリに共通する HTML 動的サービスを開発していましたが、さまざまなカテゴリへのアクセスの生成と展開を容易にし、クラウド移行のトレンドに従うために、Docker を使用して修正することを検討しました。サービス内容や製品バージョンを一元管理します。この記事では、私が Docker を提供するプロセスで蓄積した最適化の経験を参考として共有します。

Nodeのプロセス管理ツール「pm2」を徹底分析 Nodeのプロセス管理ツール「pm2」を徹底分析 Apr 03, 2023 pm 06:02 PM

この記事では、Node のプロセス管理ツール「pm2」について説明し、pm2 が必要な理由、pm2 のインストール方法と使用方法について説明します。皆様のお役に立てれば幸いです。

PIノードティーチング:PIノードとは何ですか? PIノードをインストールしてセットアップする方法は? PIノードティーチング:PIノードとは何ですか? PIノードをインストールしてセットアップする方法は? Mar 05, 2025 pm 05:57 PM

ピン張りのノードの詳細な説明とインストールガイドこの記事では、ピネットワークのエコシステムを詳細に紹介します - PIノードは、ピン系生態系における重要な役割であり、設置と構成の完全な手順を提供します。 Pinetworkブロックチェーンテストネットワークの発売後、PIノードは多くの先駆者の重要な部分になり、テストに積極的に参加し、今後のメインネットワークリリースの準備をしています。まだピン張りのものがわからない場合は、ピコインとは何かを参照してください。リストの価格はいくらですか? PIの使用、マイニング、セキュリティ分析。パインワークとは何ですか?ピン競技プロジェクトは2019年に開始され、独占的な暗号通貨PIコインを所有しています。このプロジェクトは、誰もが参加できるものを作成することを目指しています

pkg を使用して Node.js プロジェクトを実行可能ファイルにパッケージ化する方法について説明します。 pkg を使用して Node.js プロジェクトを実行可能ファイルにパッケージ化する方法について説明します。 Dec 02, 2022 pm 09:06 PM

Nodejs実行可能ファイルをpkgでパッケージ化するにはどうすればよいですか?次の記事では、pkg を使用して Node プロジェクトを実行可能ファイルにパッケージ化する方法を紹介します。

npm ノード gyp が失敗した場合の対処方法 npm ノード gyp が失敗した場合の対処方法 Dec 29, 2022 pm 02:42 PM

「node-gyp.js」が「Node.js」のバージョンと一致しないため、npm node gyp が失敗します。解決策は次のとおりです: 1. 「npm cache clean -f」を使用してノード キャッシュをクリアします; 2. 「npm install -」を使用します。 g n" n モジュールをインストールします。 3. 「n v12.21.0」コマンドを使用して、「node v12.21.0」バージョンをインストールします。

Angular と Node を使用したトークンベースの認証 Angular と Node を使用したトークンベースの認証 Sep 01, 2023 pm 02:01 PM

認証は、Web アプリケーションの最も重要な部分の 1 つです。このチュートリアルでは、トークンベースの認証システムと、それが従来のログイン システムとどのように異なるかについて説明します。このチュートリアルを終えると、Angular と Node.js で書かれた完全に動作するデモが表示されます。従来の認証システム トークンベースの認証システムに進む前に、従来の認証システムを見てみましょう。ユーザーはログイン フォームにユーザー名とパスワードを入力し、[ログイン] をクリックします。リクエストを行った後、データベースにクエリを実行してバックエンドでユーザーを認証します。リクエストが有効な場合、データベースから取得したユーザー情報を使用してセッションが作成され、セッション情報が応答ヘッダーで返され、セッション ID がブラウザに保存されます。対象となるアプリケーションへのアクセスを提供します。

See all articles