末日的开端?Deno vs Node.js
末日的开端?Deno vs Node.js
Node.js 的创始人后悔了!
没错,你没听错,但为什么呢?
Node.js 的创始人 Ryan Dahl 认为他在设计 Node.js 时犯了很多错误。
让我们来看看这些错误是什么。
- 不拘泥于 Promise:Promise 是 async/await 的必要抽象。
- 安全性:在 Node.js 程序中,您可以访问各种系统调用。
- GYP 构建系统:后来 Chrome 弃用了该系统,但 Node 继续使用它。
- package.json:这使得Node.js依赖于NPM(私有控制的仓库),并引入了模块目录的概念。
- node_modules:宇宙中最重的物体。它使模块解析算法变得复杂。
- require("module"):没有.js扩展名,这不是JS类型的index.js,这种不必要的复杂模块加载系统只是为了看起来花哨。
Ryan Dahl提出了一个解决Node.js问题的方案。
DENO:一个安全的 JavaScript 和 TypeScript 运行时环境
- 内置于 Rust 语言
- 采用V8发动机
- 东京
- 开箱即用,支持 TypeScript。
以单个可执行文件的形式发布,没有任何依赖项。是的,无需安装任何依赖项
。默认安全。无文件、网络或环境访问权限(除非显式启用)。
内置实用程序,例如依赖项检查器 (deno info) 和代码格式化程序 (deno fmt)。
打包成一个单独的 JavaScript 文件。
Node.js 与 Deno
让我们看看它与 Node.js 相比表现如何。
- Deno 不使用 npm
- 它使用以 URL 或文件路径形式引用的模块。
- Deno 的模块解析算法不使用 package.json 文件。
- Deno 中的所有异步操作都会返回一个 Promise 对象。因此,Deno 提供的 API 与 Node 不同。
- Deno 需要明确的文件、网络和环境访问权限。
- Deno总是因为未被发现的错误而死亡。
- 它使用“ES模块”,不支持require()函数。第三方模块通过URL导入,例如:
import * as log from "https://deno.land/std/log/mod.ts";
远程代码会在首次执行时被获取并缓存,并且只有在使用 `--reload` 标志再次运行时才会更新。因此,即使您离线,它也能稍后运行。
从远程 URL 加载的模块/文件旨在保持不可变性并可缓存。
Deno 安装
现在让我们看看安装 Deno 有多么容易。
在终端运行以下命令
Shell(Mac、Linux):
$ curl -fsSL https://deno.land/x/install/install.sh | sh
PowerShell(Windows):
> iwr https://deno.land/x/install/install.ps1 -useb | iex
参考:Deno.land 网站
现在让我们来构建 HelloWorld!
创建一个名为 welcome.ts 的文件,并添加基本的 JavaScript 代码。
console.log('Hello World!');
从命令行运行
$ deno run welcome.ts
Hello World!
您无需下载即可直接从 URL 运行程序。
$ deno run https://deno.land/std/examples/welcome.ts
难道不是这么简单吗?
您是否想观看一段关于使用 React + Deno 实现功能性 CRUD 操作的详细视频?
请发表意见。
你可以在这里找到关于Deno 与 Node.js 的视频:Node.js 的终结之始
您还可以参考更多关于 Deno 的教程,例如
Deno.js 教程:安装、HTTP 服务器、Deno 路由、Deno MySQL 和 Deno REST API(使用 MySQL)。
Deno安装:
如何在Deno上运行HTTP服务器?
如何在Deno上使用Oak中间件进行路由?
如何在Deno中连接MySQL数据库?
如何在Deno上使用MySQL构建REST API?