Deno是一种新型的构建在Google V8引擎之上的TypeScript安全运行时,最近已经发布到了0.1.8版本。前端
这个运行时是为了解决NodeJS带来的一系列问题:python
再也不有package.json,再也不有常常变化的依赖;git
取而代之的是,保存文件到你的项目中,或者经过http资源下载他们,以后他们即可以永久地被缓存下来;github
同时,再也不采用GYP(Generate Your Projects,是一个Google开源的构建系统,最开始用于Chromium项目,下载一些其余的开源项目也开始使用GYP,如V八、Node.js、WebRTC等),替代他的是GN(GN是一个生成Ninja构建文件的元构建系统,以即可以用Ninja构建Chromium,GN文件比GYP文件更具可读性和可维护性,GN比GYP快20倍);json
经过flatbuffers(FlatBuffers是一个开源的、跨平台的、高效的、提供了C++/Java接口的序列化工具库)消息传递取代直接调用系统方法;数组
此外还带有开箱即用的TypeScript语法支持,再也不须要Babel之类的工具将TypeScript编译成JavaScript。缓存
本文不会告诉你Deno究竟有多强大,仅是一篇快速入门的教程让你了解这个新运行时,做者后续也会关注Deno的发展动向,若是有新收获也会同步给你们。安全
安装bash
二进制文件能够从Deno的GitHub仓库获取,你能够阅读仓库的Readme文件,本身尝试去编译它。编译的过程十分占系统资源,所以确保你的机器RAM至少在4GB以上,而且是SSD硬盘,不然你将花费大量的时间等待编译的完成。微信
咱们就经过Python的方式下载安装deno吧,毕竟mac上默认安装有Python。
curl -sSf https://raw.githubusercontent.com/denoland/deno_install/master/install.py | python
而后将Deno将入到环境变量中
echo export PATH="/Users/cuitianze/.deno/bin":\$PATH >> $HOME/.bash_profile
OK,大功告成!
运行脚本
在Deno中,你既能够运行JavaScript文件,也能够运行TypeScript文件。经过Deno命令将文件名做为参数运行你的代码。你能够在仓库的tests文件夹中看到大量的Deno脚本示例。
控制台输出
和其余任何语言或者框架同样,你能够作的第一件事就是在控制台里输出一个消息。你能够简单地写以下代码打印出“Hello World!”。
console.log("Hello World!")
文件系统访问
Deno提供了基础的文件系统同步访问的能力,如readFileSync和writeFileSync函数。
首先建立一个包含“黑马大前端”字符串的文件,
echo 黑马大前端 >> hi.txt
而后经过如下的代码来读取这个文件,建立hi.ts:
import { readFileSync } from "deno"; const data = readFileSync("hi.txt"); console.log(data);复制代码
咱们看看会打印出什么?
咱们经过readFileSync打印出了无符号8位整型数组形式的数据。若是咱们想将它转换成字符串形式,须要使用“TextDecoder”,如下代码会生成正确的输出:
import { readFileSync } from "deno"; const decoder = new TextDecoder("utf-8"); const data = readFileSync("hello.txt"); console.log(decoder.decode(data));复制代码
Perfect!“黑马大前端”被成功地打印出来了。
文件写入
既然咱们已经读取而且解码了一个文本文件,那么接下来咱们要演示的就是写入一个文件。咱们经过writeFileSync函数来实现。这个函数须要传递两个参数,一个是文件路径,一个是待写入的内容。咱们建立hello.ts写入以下代码:
import { writeFileSync } from "deno"; const encoder = new TextEncoder("utf-8"); const data = encoder.encode("你好,黑马大前端"); writeFileSync("hello.txt", data);复制代码
然而,事与愿违,文件写入并不像文件读取那样轻松。
这是由于Deno默认禁止写的权限,须要特别受权文件写的权限以让writeFileSync生效。
deno --allow-write hello.ts
Cool!成功写入文件了。
咱们在实际项目中,应该是对第三方引入的文件存在不信任,此时应该有更细粒度的文件访问和网络访问的权限控制,我也向Deno的核心成员提出了个人疑虑,值得庆幸的是,更细粒度的权限控制已经在规划中了。
文件信息读取
import { statSync } from "deno"; const fileInfo = deno.statSync("hi.txt"); console.log(fileInfo.isFile()); console.log(fileInfo.isSymlink()); console.log(fileInfo.isDirectory()); console.log(fileInfo.len); // File Size console.log(fileInfo.modified); // Last modification date console.log(fileInfo.accessed); // Last access date console.log(fileInfo.created); // Creation date复制代码获得的文件信息以下:
定时器
定时器支持setTimeout, clearTimeout, setInterval和clearInterval,
正如JavaScript的用法同样,这里就不详细概述了。setTimeout(function() { console.log("---黑马来了---");}, 3000);复制代码
本身跑一遍就有感知了,运行结果以下:
还有一个Feature不得不提,deno能够直接运行网络文件。
赞👍期待Deno发展得愈来愈好。
本文做者:黑马大前端 崔天泽
微信扫一扫关注“黑马大前端”公众号