本文最初发布于Medium网站,经原作者授权由InfoQ中文站翻译并分享。
NodeJS的创造人Ryan Dahl刚发布了一个新的运行时Deno,旨在解决Node存在的许多缺陷。像大家一样,我一开始也以为这只是又一个JS框架。但是深入了解过Deno的各项优点之后,我意识到了Deno正是2020年的今天,后端Javascript开发人员所需要的东西。在这篇文章中,我们就来看一下JavaScript开发人员为什么在使用Deno时能比Node获得更流畅、更现代化的体验。
如果你也像我一样是一位React开发人员,你会注意到使用NodeJS导入软件包的语法是不一样的。这是因为Node面世于2009年,这些年来Javascript得到了大量更新和改进。
在React(和Deno)中,我们使用import package from 'package’语法,而在Node中我们使用const package = require(“package”)语法。
Deno的ES模块import有两个优势:
如上图所示,我们正在从一个URL导入moment包,这也是Deno的另一个优势。
使用Deno时,你不用再依赖NPM了。是的,不再需要package.json。每个包都是从一个URL加载的。
在NodeJS中,要使用一个软件包,你必须先从NPM安装它:
npm i moment
等它安装完毕后,再将其包含在你的应用中:
const moment = require("moment")
另外,不管是谁要在本地运行你的NodeJS 存储库,都必须从NPM安装所有依赖项。
在Deno中,这个包是从一个URL导入的。所以要使用moment时,只需导入https://deno.land/x/moment/moment.ts即可。
Deno中软件包这块的另一大优势是,每个包安装完成后都缓存在硬盘驱动器上。也就是说软件包的安装过程只运行一次。要在任何地方再次导入依赖项时,并不需要重新下载。
在NodeJS中使用TypeScript需要很多准备工作。你必须安装typescript,更新package.json、tsconfig.json,并确保你的模块支持@types。
在Deno中,你要做的就是将文件另存为.ts而不是.js,TypeScript编译器已经准备就绪了。
在Node中,我们只能在一个异步函数中访问await关键字。
而在Deno中,你可以随时随地await任何事情,而无需将其包装在一个异步函数中。
几乎所有的Javascript应用都包含许多异步函数。这一改进让代码变得更加简洁明了。
要使用Javascript发出HTTP请求,我们可以使用Fetch API。
在NodeJS中我们没有访问Browser API的权限,因此我们不能直接调用一个fetch函数。我们必须先安装这个包:
npm i node-fetch
然后导入它:
const fetch = require("node-fetch")
这样我们才能调用一个fetch。
Deno原生支持访问window对象,于是你可以调用fetch(“https://something.com”)以及Browser API中的其他任意内容,而无需安装任何库。
有了这个顶级await的优势,Deno的代码就会比Node简单很多:
Deno还有其他许多优点,例如默认情况下更安全、可以执行Wasm二进制文件、拥有许多内置库,等等。
本文提到的这些要点都是相互联系的,它们共同打造出了一个更现代化的JavaScript后端运行时。作为一名React开发人员,我站Deno这边。现在我可以使用import语法,在需要的任何位置编写await,无需任何配置直接使用TypeScript,甚至可以无需安装包就调用fetch。一切都非常简单。
Deno最终会取代Node吗?也许会吧。这可能需要几年时间。NodeJS生态系统非常庞大,Deno可能需要一些时间才能迎头赶上。很多Javascript开发人员最近都考虑在新项目中使用Deno,因此如果你近期想要开始做一个新项目,Deno绝对值得你研究一下。了解更多信息,请访问https://deno.land/
领取专属 10元无门槛券
私享最新 技术干货