学得动的Deno

学得动的Deno

原创: 崔天泽 黑马大前端

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函数。

readFileSync以文件的路径做为参数(能够是相对于当前工做目录的相对路径,也能够是绝对路径),调用后会返回文件内容。

首先建立一个包含“黑马大前端”字符串的文件,

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的核心成员提出了个人疑虑,值得庆幸的是,更细粒度的权限控制已经在规划中了。


文件信息读取

statSync函数会返回一个文件的信息。

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发展得愈来愈好。


本文做者:黑马大前端 崔天泽

微信扫一扫关注“黑马大前端”公众号

相关文章
相关标签/搜索