我一直在检查Deno,发现如果您正在寻找JavaScript和TypeScript运行时,它是一个非常不错的选择,它带有预制的模块,这些模块使开发应用程序非常容易而无需从中启动所有内容划痕。
deno比节点具有很酷的优势。它不取决于CommonJS模块系统或NPM注册表。相反,它使用ES模块系统,这使得共享和分发模块变得轻而易举!您甚至可以从URL加载模块,而不必担心版本冲突或软件包管理。
默认情况下,DENO脚本是在沙盒环境中执行的,而无需访问诸如文件系统或网络之类的敏感资源。要授予对这些资源的访问,您必须使用一组标志明确提供许可。例如,如果您希望脚本访问网络,则可以使用标志,可以使用--allow-net
标志。
我喜欢deno,这是因为它的安全且Easyt还提供了一些很酷的内置开发工具,以使您的生活更轻松。您会喜欢您的编辑器的代码格式格式(DENO FMT),Linter(DeNo Lint),Test Runner(DENO TEST)和语言服务器。另外,已经对一些标准模块进行了审查并保证与DENO合作,您甚至可以使用现有的NPM模块。
阅读有关Permisions
的更多信息
我认为,尝试一下的最佳方法是用Deno构建一些东西。
在系统上安装DENO。
安装过程很简单。作为Windows用户,我只需要在PowerShell中运行以下命令:
irm https://deno.land/install.ps1 | iex)
如果您使用其他操作系统,请检查官方网站以获取安装说明。
安装完成后,您可以在终端中运行DeNo -Help以查看选项的完整列表。
C:\Users\dany.paredes>deno --help
deno 1.31.3
A modern JavaScript and TypeScript runtime
Docs: https://deno.land/manual@v1.31.3
Modules: https://deno.land/std/ https://deno.land/x/
Bugs: https://github.com/denoland/deno/issues
To start the REPL:
deno
To execute a script:
deno run https://deno.land/std/examples/welcome.ts
To evaluate code in the shell:
deno eval "console.log(30933 + 404)"
USAGE:
IDE DENO
我将使用我喜欢的IDE WebStorm,因为它支持扩展程序的DENO,但您可以使用VSCODE或Webstorm。
。一个不错的选择是Netzo,它不仅仅是Deno的Web IDE,它是构建和部署我们的应用程序的惊人平台。如果您想尝试一下。
Web服务器示例
在构建应用程序之前,我想为节点/DENO开发人员创建一个“ Hello World” Web服务器示例。这个想法是了解导入库和使用内置对象的容易,例如fetch
API中的Response
。
创建一个新文件,例如mywebserver.ts
并粘贴以下代码:
import { serve } from "https://deno.land/std@0.182.0/http/server.ts"
serve(() => new Response("Hello World"), { port: 8800 })
此代码从DENO标准库导入服务器对象,创建服务器实例,并将其设置为在端口8800上侦听。接收到请求时,Fetch API的响应对象将“ Hello World”响应发送给客户端。
如前所述,要操作Web服务器,我们必须授权它访问网络,因为它依赖于库服务器。
执行DENO运行MyWebserver.ts命令时,DENO会提示您提供所需的权限。
deno run .\mywebserver.ts
┌ ⚠️ Deno requests net access to "0.0.0.0:8800".
├ Requested by `Deno.listen()` API
├ Run again with --allow-net to bypass this prompt.
└ Allow? [y/n/A] (y = yes, allow; n = no, deny; A = allow all net permissions) >
通过选择选项A。
允许所有内容和我们的Web服务器
ta-da!我们的Web服务器现在正在返回一条“ Hello World”消息,该消息可能会派上用场生成模拟API。
Release notes: https://github.com/denoland/deno/releases/tag/v1.32.2
Blog post: https://deno.com/blog/v1.32
✅ Granted all net access.
Listening on http://localhost:8000/
升级到新版本
在学习DeNo时,我偶然发现了一个刚发布版本的消息。毫不拖延,我在终端执行了一个直接的命令以进行升级。
deno upgrade
Looking up latest version
Found latest version 1.32.3
Downloading https://github.com/denoland/deno/releases/download/v1.32.3/deno-x86_64-pc-windows-msvc.zip
Deno is upgrading to version 1.32.3
Upgraded successfully
Release notes: https://github.com/denoland/deno/releases/tag/v1.32.3
构建Denopassword
我想向前迈出一步,而不仅仅是一个简单的helly-world,它可以开发一个终端应用程序,其中用途添加了他的资源名称,然后为其资源生成一个密码。
在这种情况下,我们学习以下几点。
-
导入库
passwordGenerator\
。 -
从终端获取值。
-
使用库和输出数据。
-
组合多个文件。
让我们走!
首先,创建一个新文件denopass.ts
并导入passwordGenerator
库,下一个添加两个函数:createPassword
和getRandomPasswordLength
。
- createPassword
函数输入域名然后生成密码。
- 当域名简短时,getRandomPasswordLength
函数会产生一个随机数。
最终代码应该看起来像这样:
import { passwordGenerator } from "https://deno.land/x/password_generator/mod.ts";
export function createPassword(accountName: string): string {
const passwordLength = accountName.length > 8 ? accountName.length : getRandomPasswordLength();
return passwordGenerator("*", passwordLength);
}
export function getRandomPasswordLength(): number {
const min = 5;
const max = 15;
return Math.floor(Math.random() * (max - min + 1)) + min;
}
完美,我们的下一步是创建我们交互,显示并从用户获取值的主要或入口点文件。
创建一个名为main.ts
的新文件,并从denopass.ts
文件导入createPassword
函数。
进入main.ts\
,我们将使用console.log,console.clear和提示等常用方法。
-
要清除终端,请使用Command Console.Clear()。
-
使用console.log('欢迎来到denopass')显示一个欢迎消息。
-
使用
prompt
从用户获取帐户名。 -
如果帐户名称为空白,请使用deno.exit(1)终止应用程序。
-
通过将帐户名称传递到CreatePassword函数来创建密码。
-
使用Console.log将生成的密码输出到终端。
代码的最终迭代应如下出现:
import { createPassword } from "./denopass.ts";
console.clear();
console.log("Welcome to DenoPass");
const accountName = prompt(
"Please enter the name of the account or domain for which you want to generate a password"
);
if (!accountName) {
console.error("Account or domain name cannot be empty.");
Deno.exit(1);
}
const accountPassword = createPassword(accountName);
console.log(`The password for ${accountName} is ${accountPassword}`);
接下来,从终端到包含main.ts文件的目录。之后,使用deno run main.ts\
运行该应用:
deno run main.ts
通过运行main.ts文件,该应用会提示用户输入所需的名称,然后生成安全的随机密码。完成后,该密码出现在终端中。
是的!我们有一个密码生成器!
捆绑我的应用程序
在deno中,您可以通过使用“ - 捆绑”参数将几个文件组合到一个可执行文件中。
例如,如果要将main.ts
和denopass.ts
捆绑到一个文件中,则可以运行以下命令:
PS C:\Users\dany.paredes\Desktop\code\hello_deno> deno bundle .\main.ts zuperDeno.ts
Emit "zuperDeno.ts" (6.49KB)
PS C:\Users\dany.paredes\Desktop\code\hello_deno> deno bundle .\main.ts zuperDeno.ts
将生成一个称为Zuperdeno.ts的新文件,其中包含Main.ts和Denopass.ts的代码。
您能想象将我们的终端应用程序用于密码生成API会有多么令人兴奋?这将是一个挑战,但我已经准备好了!让我们这样做!”
变成API
最终任务是将密码生成器客户端转换为API。对于DENO,这可能是一个简单的过程,因为我们可以使用内置的HTTP模块来建立HTTP服务器并管理传入请求。
要开始,我们将制作一个新文件并命名IT passwordapi.ts。在此文件中,从denopass.ts
导入createPassword
函数。
要设置HTTP服务器,请使用serve()
,因为我们进行了开始文章,使用请求参数来管理传入请求并生成密码。
我们在端口8800上设置了HTTP服务器。当收到Get请求时,它检查URL是否匹配模式/password/<accountName>
,如果是的,则调用函数以使用<accountName>
变量来生成密码。如果URL与模式不匹配,则返回“未找到”错误。
最终代码看起来像:
import { createPassword } from "./denopass.ts";
import { serve } from "https://deno.land/std@0.96.0/http/server.ts";
const PORT = 8800;
const server = serve({ port: PORT });
console.log(`Listening on port ${PORT}...`);
for await (const req of server) {
const { method, url } = req;
if (method !== "GET") {
req.respond({ status: 405, body: "Method Not Allowed" });
continue;
}
const match = url.match(/^\/password\/(.+)$/);
if (match) {
const accountName = match[1];
const password = createPassword(accountName);
req.respond({ body: password });
} else {
req.respond({ status: 404, body: "Not Found" });
}
}
使用命令deno run --allow-net passwordApi.ts
运行服务器。
请注意,您需要使用
--allow-net
标志授予网络权限,因为服务器在网络端口上听。
服务器启动并运行后,请使用浏览器到http://localhost:8800/password/lebron
导航,以生成服务器响应中名为lebron的帐户的密码。
完成!但是,为了增强用户体验,请考虑尝试Netzo。
Netzo:一个容易构建和部署DeNo应用程序的平台
我刚刚检查了Netzo,这是一个云平台,为创建和启动DENO应用程序提供了一个全面的环境。多亏了Netzo,您可以轻松地使用Vanilla JavaScript/Typescript制作自己的前端和后端,而无需处理基础架构。
想象一下使用您喜欢的DENO框架构建惊人的应用程序,API和工作流程,甚至可以从Netzo提供的预构建模板中进行选择!这还不是全部 - Netzo还包含易于共享和无配置的部署功能,这些功能使开发过程比以往任何时候都更快,更有效!那有多惊人?!
我有信心使用Netzo开发一个相同的应用程序,因为它极大地简化了编码和发布DENO应用程序。
探索Netzo的惊人功能,并通过访问https://netzo.io发现其令人印象深刻的功能。你会惊讶的!
结论
出色的工作!我们介绍了一些DENO基础知识,例如如何在计算机上安装它以及如何运行第一个程序。我们也有机会看到Deno如何从Node.js脱颖而出以及它所提供的所有令人敬畏的好处。
嘿! Deno具有一项很棒的功能,您可以轻松地将外部库组合到您的项目中。我们使用passwordGenerator
库制作了一个很酷的密码生成器客户端,以演示在DeNo的帮助下将基于终端的应用变成基于Web的API的容易。很整洁,对
因此,为了结束它,我希望Deno上的这个小小的介绍使您感到好奇,并鼓励您更深入地研究这种优先级安全,简单性和整体用户体验的酷技术。
弗朗兹·哈哈克(Franz Hajak)的照片