Deno | 成为Node 的替代品?

2,366 阅读6分钟

本篇干货推荐 新媒体导航网站 - 切页

最近一段时间开发者总是干货满满,这不就在前几天(2020-05-14) 日,deno V 1 版本正式发布,如果你不知道这是什么,那你一定知道node 没错 no--de 字母反过来就是 de-no

有一点很重要:**可能成为Node.js ** 的代替品 ,站在技术的起点,将来你就是最靓仔。几年前的Vue 不知不觉也都 Vue3 了。一起学吧

历史

是个什么时间都要拉上历史掰扯掰扯。Deno 的正式发布被许多像我们这样的前端开发者视为头等大事 ,就像当爹一样。

发音

比较尴尬的事情,和同事说起这件事,别不知道怎么发音

  • 德诺
  • 迪诺

怎么发音的都有,这个也不必强求吧 就像 domain “du men”还是 "dou man" ,不过油管上 大佬们发音也不一。58.5K 星的项目 还是应该知道 怎么发音 。

作者

就是那个写node 的家伙,大名鼎鼎——Ryan Dahl。在 2018 年的演讲deno 演讲视频 还是个小项目。笔者了解的也是。不管是 Node 还是如今的 Deno 作者在 2009 就已经开始。当时演讲的时候说是 感到遗憾的十件事(是个男人谁还没干过遗憾的事) 马爸爸还悔创阿里呢

  • ts
  • 然后底层换用 Go

这老哥后来搞 人工智能 去了

定义

A secure runtime for JavaScript and TypeScript.
JavaScript和TypeScript的安全运行时。

一个用于后端的全新新的不能再新的JavaScript 运行时

  • 不再使用C++ 编写 ;使用基于ToKio 平台的Rust 语言编写
  • 运行 GooGle 的 V8 引擎
  • 关于 Rust 提供类似 C++ 的良好性能 但又安全
    • 默认为安全。除非明确启用,否则没有文件,网络或环境访问权限
  • 不是语言 不是语法 而是一个运行时
  • 为什么使用Rust : 因为有很多现成的模块啊 节约开发时间呗

改变

改变才是成长的第一步 那自己推翻自己 究竟何来必要呢。全新理念,带来什么突破又或者说有什么革新

  • 安全集成
  • 更为完整的标准库
  • TypeScript
  • 不再有NPM 或者 node_modules 文件夹
  • 窗口对象
  • 其他

安全集成

默认情况下,Node.js允许您访问所有内容,也就是说,您可以读写文件系统,发出传出请求,访问环境变量等。尽管作为具有这种访问权限的开发人员是有好处的,但是如果您在编写自己的代码时不注意,也会带来安全风险。

因此,Deno使用命令行参数来启用或禁用对不同安全功能的访问。因此,如果您需要脚本能够访问该/etc文件夹,则可以执行以下操作:

deno --allow-read = / etc myscript.ts

完整的标准库

Node 作为运行时 与其他语言还有一段时间要走,不过势头正猛。本质上 Deno 开箱即用 诸多的模块可用

哪哪都有的TypeScript

如果你很喜欢Ts 那么 Deno 内置了 直接 内置了,直接开搞。但在背后肯定是做了甚多事情

deno run -c tsconfig.json [your-script.ts]

不再有NPM了

npm i 装包 装依赖 各种依赖关系这将成为过去时 什么概念 就是一个项目没有 package.json 那我们怎么加载第三方的模块 我们总不能 直接自己写吧 不然,我们直接

import * as log from "https://deno.land/std/log/mod.ts";

也就是说 我们不再有自己的集中式存储库。我们可以直接在引入的时候指定版本 直接修改 URL 地址就行了。使用NPM 就会导致一个巨大 **大大大node_modules 文件夹,节点或者安全性存在问题 这在历史上也是发生过的 不安全事件。在开发的时候 一不小心还点到 长长的文件夹

你好啊 我日思夜想的 Es6

由于历史原因,node 对异步的支持一般是 异步callback 。我们在写接口的时候 ,比如用express 时 就各种回调。

  • 一个是 es 导入
  • 一个是Promise

这下好了,都可以了

窗口对象

窗口对象是浏览器中的父对象,JavaScript的一些最重要的函数都从该对象派生。例如,其中之一就是fetch。不幸的是,像Axios这样的库的本机替代品在Node.js中没有位置-您必须在其中找到使用库的解决方案-但在Deno中则没有。详细看下deno.land/typedoc/int…

其他

Deno 显著的几个特点上文已经提到了,当然了,不只是这些功能,像开箱即用的大型工具(测试运行程序) 调试器 文件监视 等等

小试牛刀

安装

终端

iwr https://deno.land/x/install/install.ps1 -useb | iex

编辑器

PS D:\gh-code\awesome-frontend-learning\deno-learn> deno run https://deno.land/std/examples/welcome.ts
Download https://deno.land/std/examples/welcome.ts
Warning Implicitly using master branch https://deno.land/std/examples/welcome.ts
Compile https://deno.land/std/examples/welcome.ts
Welcome to Deno �

官方简单案例

import { serve } from "https://deno.land/std@0.50.0/http/server.ts";
const s = serve({ port: 8000 });
console.log("http://localhost:8000/");
for await (const req of s) {
  req.respond({ body: "Hello World\n" });
}

但是在这里,由于Deno的安全措施介入,我们尚未允许访问网络 这也印证了 Deno 的安全性

展望

既然大家都追寻新技术,是因为都不想落后,这也是大家都会嘴里说着学不动了 却比谁都关注新技术。真香

落后就要挨打,多么亘古不变的道理啊。

多年来,Node的发展基本可以满足我们的需求 ,不得不承认 WebpackNode 使我们前端拥有更多的能力。切图仔 不过是我们的自嘲罢了。

Deno 在现在也才是 V1 版本,我们也是简单的 探秘一下 也没有在生产环境中尝试与测试。未来的社区会发展成怎么样 我们拭目以待。笔者觉得 Vue3Deno 阅读文章的你 可以不感兴趣,但学了并不多,毕竟是 人家辛辛苦苦 开源的。Deno 还很新 Node 已经有点老了。但是两者都是十分有用途

心里话

笔者,很希望你的鼓励,一个小小的赞,可能就幻化为了坚持 所谓的动力无非是为了谁。

话很少,但我会打字,期待与你一起看看这个技术的新世界。觉得有帮助的话,点赞 评论 分享

所有的思路会第一时间更新在 《前端厚说》,时不时的聊一聊 干货 | 福利 | 黑科技 等等

文中代码

文章中的演示案例代码都会同步到GitHub 上。你可以在github 找到我