Deno 快速入门

news2024/11/19 0:23:36

目录

1、简介

2、安装Deno

MacOS下安装

Windows下安装

Linux 下安装

3、创建并运行TypeScript程序

4、内置Web API和Deno命名空间

5、运行时安全

6、导入JavaScript模块

7、远程模块和Deno标准库

8、使用deno.json配置您的项目

9、Node.js API和npm包

10、配置IDE


1、简介

Deno 是一个JavaScript、TypeScript和WebAssembly运行时,具有安全的 默认值和出色的开发人员体验。它是基于V8引擎、 Rust和tokio。

Deno是一款免费的开源软件,基于 MIT许可证。

2、安装Deno

MacOS下安装

curl -fsSL https://deno.land/x/install/install.sh | sh

Windows下安装

打开系统自带的Windows Power Shell,然后再执行下面的命令:

irm https://deno.land/install.ps1 | iex

Linux 下安装

curl -fsSL https://deno.land/x/install/install.sh | sh

安装完毕之后,可以查看当前Deno的版本,以及依赖的v8版本,ts版本,如下所示:

deno --version

3、创建并运行TypeScript程序

虽然欢迎您使用纯JavaScript,但Deno也内置了TypeScript支持。在您的终端中,创建一个名为first.ts的新文件,并包含以下代码。

let name: string = `张三`;
let age: number = 18;
let result = `我的名字是${name},年龄是${age}
明年我就${age+1}岁了`;
console.log(result)
// 我的名字是张三,年龄是18
// 明年我就19岁了

运行以下命令,查看对应输出结果:

deno run first.ts

4、内置Web API和Deno命名空间

Deno旨在提供一个类似浏览器的编程环境,​实现Web标准API , 前端JavaScript。比如说 V8引擎API是 在全局范围内可用,就像在浏览器中一样。为了看到这一点, 创建文件hello.ts,内容如下所示:

const site = await fetch("https://www.deno.com");
console.log(await site.text());

然后运行它:

deno run -A hello.ts

对于未作为Web标准存在的API(如从系统环境访问变量或操作文件系统),这些API将在Deno命名空间中公开。替换的内容 hello.ts使用以下代码,它将启动HTTP服务器,将启动8000接口。

Deno.serve((_request: Request) => {
  return new Response("Hello, world!");
});

结果如下所示;

启动一个本地服务器,一直监听8000端口。然后我们可以通过命令请求一下,看下是否返回对应的结果,如下所示:

然后,发现已输出对应的结果,在上图中有一个升级提示,运行deno upgrade 进行升级一下:

5、运行时安全

Deno的一个主要特征是运行时默认安全性,这意味着作为开发人员,您必须明确允许代码访问潜在的敏感API,如文件系统访问、网络连接和环境变量访问。

到目前为止,我们一直在使用-A标志运行所有脚本,该标志授予所有运行时特定对我们脚本的访问权限。这是运行Deno程序最允许的模式,但通常您只想授予代码运行所需的权限。

为了看到这一点,让我们还是用以上hello. ts的内容。

在没有-A标志的情况下运行这个程序-然后会发生什么?

在提示符中,您可能已经注意到它提到了运行代码以访问网络所需的CLI标志---allow-net标志。如果使用此标志再次运行脚本,系统将不会提示您以交互方式授予对脚本的网络访问权限:

deno run --allow-net hello.ts

6、导入JavaScript模块

大多数时候,您会希望将程序分解为多个文件。Deno再次支持Web标准和类似浏览器的编程模型,通过ECMAScript模块支持这一点。下面展示一下TypeScript示例:

例如有一个Hello.ts文件,内容如下所示:
 

interface Animal {
    name: string,
}
 
interface AnimalInter extends Animal {
    getInfo() : string
}
 
class Cat implements AnimalInter{ 
    birthday: Date;
    name: string;
    getInfo() {
        return this.name + ", " + this.birthday;
    }
    constructor(name: string, birthday: Date) {
        this.name = name;
        this.birthday = birthday;
    }
}
 
let result = new Cat('张三', new Date('2023-02-09'))
console.log('result: ', result.getInfo());

我们可以把Animal相关的部分,拆分成一个单独的文件,例如为Animal.ts,内容如下所示:

interface Animal {
    name: string,
}
 
export default interface AnimalInter extends Animal {
    getInfo() : string
}

然后再创建一个名为Cat.ts的文件,内容如下所示:

import AnimalInter from "./Animal.ts";
class Cat implements AnimalInter{ 
    birthday: Date;
    name: string;
    getInfo() {
        return this.name + ", " + this.birthday;
    }
    constructor(name: string, birthday: Date) {
        this.name = name;
        this.birthday = birthday;
    }
}
 
let result = new Cat('张三', new Date('2023-02-09'))
console.log('result: ', result.getInfo());

可以通过import关键字来使用此模块。然后运行一下cat.ts文件,查看一下对应的输出:

deno run cat.ts

7、远程模块和Deno标准库

Deno支持从URL加载和执行代码,就像使用 浏览器中的<script>标签。在Deno 1.x中, 标准库和大多数 第三方模块分布在HTTPS URLs上。

要查看实际操作,让我们为我们创建的Cat.ts模块创建一个测试 以上Deno提供了一个内置的测试运行器
, 使用通过HTTPS URL分发的断言模块。

创建一个文件名为cat_test.ts,内容如下所示:

import { assertEquals } from "https://deno.land/std@0.204.0/assert/mod.ts";
import Cat from "./Cat.ts";

Deno.test("Test function", () => {
  const cat: Cat =new Cat('张三', new Date('2023-02-09'));
  assertEquals("张三, Thu Feb 09 2023 08:00:00 GMT+0800 (中国标准时间)", cat.getInfo());
});

运行如下命令,看一下对应断言的结果如下所示:

deno test cat_test.ts

我们发现断言的结果是符合预期的,如果我们把预期的结果改一下

assertEquals("张三1212, Thu Feb 09 2023 08:00:00 GMT+0800 (中国标准时间)", cat.getInfo());

我们通过上图就能发现预期的值和方法返回的结果不一致。

8、使用deno.json配置您的项目

Deno项目不需要配置文件默认,但有时将设置、管理脚本和依赖配置存储在众所周知的位置很方便。在Deno中,该文件是deno. json或deno.json。该文件的行为有点像Node.js中的pack.json文件。

您可以使用deno. json来配置导入映射,这将允许您为常用模块设置别名。

为了演示,让我们将项目中要使用的标准库版本设置为0.204.0版。

创建一个包含以下内容的deno.jsonc文件。

{
  "imports": {
    "$std/": "https://deno.land/std@0.204.0/"
  }
}

现在,打开之前的测试文件,并将其更改为使用此导入别名。

import { assertEquals } from "$std/assert/mod.ts";
import Cat from "./Cat.ts";

Deno.test("Test function", () => {
  const cat: Cat =new Cat('张三', new Date('2023-02-09'));
  assertEquals("张三, Thu Feb 09 2023 08:00:00 GMT+0800 (中国标准时间)", cat.getInfo());
});

我们发现运行的结果和之前的一样,并且在当前目录下生成了一个deno.lock的文件,这个文件中指定代码所依赖的一组文件,如下所示:

9、Node.js API和npm包

Deno提供了一个兼容层,使您的代码能够使用 Node.js内置模块和来自npm的第三方模块。 在代码中使用Node和npm模块看起来很像使用标准Deno 模块,除了在导入时使用node:npm:说明符 分别是Node内置模块或npm模块。

要了解它是如何工作的,请创建一个名为server.js的文件,并包含 下面是一个简单的HTTP服务器,使用流行的 Express框架。

import express from "npm:express@4";

const app = express();

app.get("/", (request, response) => {
  response.send("Hello from Express!");
});

app.listen(3000);

运行代码,结果如下所示:

10、配置IDE

Deno开发在许多IDE中。一个受欢迎的选择是 Visual Studio Code, 由Deno维护的官方扩展团队  安装扩展 并在VS Code工作区中启用它,方法是选择  Deno: Initialize Workspace Configuration中的选项。
首先,在VSCode中,在扩展标签中搜索Deno,然后选择进行安装。
然后,打开命令控制面板,搜索Deno,进行Deno工作区的相关配置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1112697.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

宏(预编译)详解

目录 一、程序的编译环境 二、运行环境 三、预编译详解 3.1预定义符号 3.2.1 #define 定义标识符 3.2.2 #define 定义宏 3.2.3#define替换规则 3.2.4 #和## 2)##的作用&#xff1a; 3.2.5宏和函数的对比 3.2.6宏的命名约定和#undef指令 一、命名约定&#xff1a; …

CCC数字钥匙设计【NFC】--通过NFC进行车主配对Phase3

1、车主配对流程介绍 车主配对可以通过车内NFC进行&#xff0c;若支持UWB测距&#xff0c;也可以通过蓝牙/UWB进行。通过NFC进行车主配对总共有5个Phase。本文档主要对Phase3进行介绍。 1) Phase0&#xff1a;准备阶段&#xff1b; 2) Phase1&#xff1a;启动流程&#xff1…

C语言中的3种注释方法

C语言中的3种注释方法 2021年8月28日星期六席锦 在用C语言编程时&#xff0c;常用的注释方式有如下几种&#xff1a; (1)单行注释 // … (2)多行注释 /* … */ (3)条件编译注释 #if 0…#endif (1)(2)在入门教程中比较常见。 对于(1) 【单行注释 // …】&#xff0c;注释只能显示…

将输入对象转换为数组数组的维度大于等于1numpy.atleast_1d()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 将输入对象转换为数组 数组的维度大于等于1 numpy.atleast_1d() 选择题 使用numpy.atleast_1d()函数,下列正确的是&#xff1f; import numpy as np a1 1 a2 ((1,2,3),(4,5,6)) print("…

Dev-C++ 软件安装教程(附安装包下载)

Dev-C&#xff08;123网盘&#xff09;提取码:EoF8https://www.123pan.com/s/JRpSVv-dKnjv.html &#xff08;软件包下载后&#xff0c;右键解压&#xff09; 一、打开文件夹&#xff0c;双击“Dev-C” 二、软件安装&#xff0c;点击“OK” 三、点击“I Agree” 四、点击“Ne…

计算机视觉基础(5)——特征点及其描述子

前言 本文我们将学习到特征点及其描述子。在特征点检测中&#xff0c;我们将学习角点检测和SIFT关键点检测器&#xff0c;角点检测以哈里斯角点检测器为例进行说明&#xff0c;SIFT将从高斯拉普拉斯算子和高斯差分算子展开。在描述子部分&#xff0c;我们将分别学习SIFT描述子和…

49数码论坛系统设计与实现

大家好✌&#xff01;我是CZ淡陌。一名专注以理论为基础实战为主的技术博主&#xff0c;将再这里为大家分享优质的实战项目&#xff0c;本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路…

浅析限流式保护器在低压配电系统中电气火灾的应用

安科瑞 华楠 【摘要】文章分析了低压配电系统短路的类型、原因及火灾危险性&#xff0c;并提出改善措施。 【关键词】&#xff1a;低压配电系统&#xff1b; 短路&#xff1b; 措施 0引言 随着人类进入现代文明社会&#xff0c;电气的普及深入千家万户&#xff0c;广泛应用于…

npm ERR! exited with error code: 128

1.遇到的问题 报错信息&#xff1a;npm ERR! E:\tools\Gitt\Git\cmd\git.EXE ls-remote -h -t https://github.com/nhn/raphael.git npm ERR! npm ERR! fatal: unable to access https://github.com/nhn/raphael.git/: OpenSSL SSL_read: Connection was reset, errno 10054 …

FPGA project : IIC_wr_eeprom

简介&#xff1a; 简单双向二线制&#xff0c;同步串行总线。 scl&#xff1a;串行时钟线&#xff0c;用于同步通讯数据。 sda&#xff1a;双向串行数据线。 物理层&#xff1a; 1&#xff0c;支持挂载多设备。 2&#xff0c;二线制。 3&#xff0c;每个设备有其单独的地…

【已解决】java的gradle项目报错org.gradle .api.plugins .MavenPlugin

我的java的gradle项目经常报错org.gradle .api.plugins .MavenPlugin。报错这个问题是因为依赖起冲突了&#xff0c;我在网上试了很多方法都没有效果&#xff0c;折让小编我很是苦恼&#xff0c;不过还好到最后问题还是解决了。 首先要知道你的项目所使用的gradle版本&#xf…

Webpack十大缺点:当过度工程化遇上简单的静态页面

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

React-Router路由

1.React Router的基本使用 安装&#xff1a;安装时&#xff0c;选择react-router-dom&#xff0c;react-router会包含一些react-native的内容&#xff0c;web开发并不需要&#xff1b; npm install react-router-dom 路径模式 BrowserRouter使用history模式&#xff1b; Hash…

【六:(mock数据)spring boot+mybatis+yml】

目录 1.1、代码编写Demo类User类启动类 APplication 1.2、配置类查询语句的配置 mysql.ymlspringboot的配置 application.yml日志的配置 logback.xml数据库的配置 mybatis-config.xml 1.3、测试&#xff1a;1.3.1、测试获取用户数1.3.2、添加用户1.3.3、数据的更新1.3.4、数据的…

【八:(调springboot+testng+mybatis+数据校验】

目录 1、代码结构configcontrollermodelspringboot启动类 2、配置资源mysql.xmlapplication.ymllogback.xmlmybatis-config.xml数据库配置 3、测试验证 1、代码结构 config package com.course.config; import org.springframework.context.annotation.Bean; import org.sprin…

Linux 进程操作

文章目录 进程的基本知识进程pid进程常用的函数 forkwait和waitpidexec函数簇system函数信号处理signal函数Linux的SIGUSR1SIGUSR2 讨论 进程的基本知识 一个程序的执行称为一个进程&#xff0c;所有的代码都是在进程中执行的&#xff0c;进程是操作系统资源分配的基本单位。 在…

在启智平台上安装anconda(启智平台中新建调试任务,选的基础镜像中有conda的,就无需安装)

安装Anaconda3-5.0.1-Linux-x86_64.sh python版本是3.6 在下面的网站上找到要下载的anaconda版本&#xff0c;把对应的.sh文件下载下来 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 把sh文件压缩成.zip文件&#xff0c;拖到启智平台的调试页面 上传到平台上 un…

tlaplus-vscode插件使用记录

参考官方教程Getting Started 和油管视频A gentle intro to TLA 入门和命令 首先在vscode的扩展里面下载 然后新建一个squares.tla文件 在代码区域先输入module生成上下的分隔符&#xff0c;然后输入pluscal来调用模版&#xff0c;生成一堆预设代码 小改一下&#xff0c;编写一…

WGBS项目文章 | 在缺氮情况下,细胞自噬对植物DNA甲基化会产生怎样的影响?

发表单位&#xff1a;中国科学院江西省庐山植物园 发表日期&#xff1a;2023年9月13日 研究期刊&#xff1a;International Journal of Molecular Sciences&#xff08;IF: 5.6&#xff09; 研究材料&#xff1a;拟南芥 2023年9月13日&#xff0c;中国科学院江西省庐山植物…

【二:Spring-AOP】

目录 一 、AOP1、什么是AOP2、AOP的类型3、AOP&#xff08;底层原理&#xff09;&#xff08;1&#xff09;第一种有接口情况&#xff0c;使用JDK 动态代理&#xff08;2&#xff09;第二种没有接口情况&#xff0c;使用[CGLIB](https://so.csdn.net/so/search?qCGLIB&spm…