学得动的Deno

栏目: 前端 · 发布时间: 7年前

内容简介:Deno是一种新型的构建在Google V8引擎之上的TypeScript安全运行时,最近已经发布到了0.1.8版本。这个运行时是为了解决NodeJS带来的一系列问题:不再有package.json,不再有经常变化的依赖;

Deno是一种新型的构建在Google V8引擎之上的TypeScript安全运行时,最近已经发布到了0.1.8版本。

这个运行时是为了解决NodeJS带来的一系列问题:

不再有package.json,不再有经常变化的依赖;

取而代之的是,保存文件到你的项目中,或者通过http资源下载他们,之后他们便可以永久地被缓存下来;

同时,不再采用GYP(Generate Your Projects,是一个Google开源的构建系统,最开始用于Chromium项目,下载一些其他的开源项目也开始使用GYP,如V8、Node.js、WebRTC等),替代他的是GN(GN是一个生成Ninja构建文件的元构建系统,以便可以用Ninja构建Chromium,GN文件比GYP文件更具可读性和可维护性,GN比GYP快20倍);

通过flatbuffers(FlatBuffers是一个开源的、跨平台的、高效的、提供了C++/Java接口的序列化 工具 库)消息传递取代直接调用系统方法;

此外还带有开箱即用的TypeScript语法支持,不再需要Babel之类的工具将TypeScript编译成JavaScript。

本文不会告诉你Deno究竟有多强大,仅是一篇快速入门的教程让你了解这个新运行时,作者后续也会关注Deno的发展动向,如果有新收获也会同步给大家。

安装

二进制文件可以从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脚本示例。

学得动的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);复制代码

我们看看会打印出什么?

学得动的Deno

我们通过readFileSync打印出了无符号8位整型数组形式的数据。如果我们想将它转换成字符串形式,需要使用“TextDecoder”,以下代码会生成正确的输出:

import { readFileSync } from "deno";
const decoder = new TextDecoder("utf-8");
const data = readFileSync("hello.txt");
console.log(decoder.decode(data));复制代码

Perfect!“黑马大前端”被成功地打印出来了。

学得动的Deno

文件写入

既然我们已经读取并且解码了一个文本文件,那么接下来我们要演示的就是写入一个文件。我们通过writeFileSync函数来实现。这个函数需要传递两个参数,一个是文件路径,一个是待写入的内容。我们创建hello.ts写入如下代码:

import { writeFileSync } from "deno";
const encoder = new TextEncoder("utf-8");
const data = encoder.encode("你好,黑马大前端");
writeFileSync("hello.txt", data);复制代码

然而,事与愿违,文件写入并不像文件读取那样轻松。

学得动的Deno

这是因为Deno默认禁止写的权限,需要特别授权文件写的权限以让writeFileSync生效。

deno --allow-write hello.ts

Cool!成功写入文件了。

学得动的Deno

但是我们怎么可能仅仅满足于这样的“一刀切”方式的文件权限控制。

我们在实际项目中,应该是对第三方引入的文件存在不信任,此时应该有更细粒度的文件访问和网络访问的权限控制,我也向Deno的核心成员提出了我的疑虑,值得庆幸的是,更细粒度的权限控制已经在规划中了。

学得动的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复制代码

得到的文件信息如下:

学得动的Deno

定时器

定时器支持setTimeout, clearTimeout, setInterval和clearInterval,

正如JavaScript的用法一样,这里就不详细概述了。

setTimeout(function() {
    console.log("---黑马来了---");}, 
3000);复制代码

自己跑一遍就有感知了,运行结果如下:

学得动的Deno

还有一个Feature不得不提,deno可以直接运行网络文件。

学得动的Deno

赞:+1:期待Deno发展得越来越好。

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


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Web Form Design

Web Form Design

Luke Wroblewski / Rosenfeld Media / 2008-5-2 / GBP 25.00

Forms make or break the most crucial online interactions: checkout, registration, and any task requiring information entry. In Web Form Design, Luke Wroblewski draws on original research, his consider......一起来看看 《Web Form Design》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具