如何构建我的第一个DENO应用程序
#javascript #前端 #node #deno

我一直在检查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,它是构建和部署我们的应用程序的惊人平台。如果您想尝试一下。

Netzo Page

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/

My webserver

升级到新版本

在学习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库,下一个添加两个函数:createPasswordgetRandomPasswordLength

- 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和提示等常用方法。

  1. 要清除终端,请使用Command Console.Clear()。

  2. 使用console.log('欢迎来到denopass')显示一个欢迎消息。

  3. 使用prompt从用户获取帐户名。

  4. 如果帐户名称为空白,请使用deno.exit(1)终止应用程序。

  5. 通过将帐户名称传递到CreatePassword函数来创建密码。

  6. 使用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文件,该应用会提示用户输入所需的名称,然后生成安全的随机密码。完成后,该密码出现在终端中。

是的!我们有一个密码生成器!

password generator

捆绑我的应用程序

在deno中,您可以通过使用“ - 捆绑”参数将几个文件组合到一个可执行文件中。

例如,如果要将main.tsdenopass.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的帐户的密码。

API

完成!但是,为了增强用户体验,请考虑尝试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)的照片