用 Deno 构建自己的静态博客

引言

在前端技术发展的今天,越来越多的开发者选择使用 Deno 这一相对较新的 TypeScript 运行时,在开发 web 应用程序和工具时,它提供了面向应用程序的特性和性能改进。本文将介绍如何使用 Deno 构建自己的静态博客,既能巩固 Deno 的基础知识,也能更好的记录和分享自己的技术经验。

静态博客的优势

静态博客是一种使用静态页面生成器并将生成的 HTML 文件部署到 web 服务器的博客类型。与其他博客系统不同,它不需要一个完整的后端系统支撑,只需要一个纯净的静态页面包含 markdown 文件,博客内容经常变化的用户可以使用现代化 CI/CD 工具将任何更新自动部署到 web 服务器上。

1.安全与稳定:使用静态博客的好处之一是其相对更安全和稳定。它不像像 WordPress 这样的动态博客,被攻击者利用来强制注入代码和飞行内容。静态博客是一堆静态 html 文件,因此没有被黑漆漆的 php 代码和数据库输入机会,所以不会被入侵。

2.速度和性能:静态博客无需数据库,因此下载速度比动态博客快得多。同时,在浏览器中运行的 HTML、CSS 和 JavaScript 代码越少,加载时间就越短。

Deno 简介

Deno 是一个由 Ryan Dahl 在 2018 年发布的一个基于 V8 引擎的 TypeScript 运行时。Deno 是 Node.js 的替代品,但它具有许多 Node.js 没有的特点,例如:

  1. 支持 TypeScript,无需编译即可运行
  2. 自带现代配置文件成语 (例如 JSON 和 TypeScript)
  3. 支持异步和同步 I/O,无需回调
  4. 安全性更强

Deno 使用原生支持语法的 Typescript ,使用 Rust 编写其内核,并集成了现代 Web API,例如 Fetch 和 WebSockets。它还包含一个高效的 ES 模块加载程序和一个自由制定的打包工具。

搭建 Deno 静态博客

准备工作

在开始之前,确保您的 Deno 版本是最新的,否则可能会在此处遇到问题。可以通过运行以下命令来验证 Deno 版本:

- ---- ---------

在构建静态博客之前,您需要确保安装了下列依赖项:

  1. Deno
  2. Markdown-to-HTML 转换器
  3. Github Pages(也可以使用其他的静态托管平台)
- ---- ------- -------- --------------

步骤 1 - 创建博客项目

首先,您需要创建一个基本的博客项目。您可以使用 Git 仓库,如:codesandbox 来完成这项任务。

- ----- -------
- -- -------
- --- ----

步骤 2 - 创建博客文章

my-blog 文件夹中,创建一个名为 my-first-post.md 的 markdown 文件。

- -- ----- ----

---- -- -- ----- ---- -----

将 MarkDown 文件用命令行工具转换为 HTML。

- -------------- ----------------

步骤 3 - 创建 main.ts

my-blog 文件夹中,创建一个名为 main.ts 的 TypeScript 文件。在这里,您将读取 markdown 文件并将其渲染为 HTML。

------ - -- ---- ---- ------------------------------------

----- ------- - --- --------------

----- -------- - --- ---------------------
  ----- -----------------------------------
--

----- ---- - -
 --------- -----
 ------
   ------
     ----- ----------------
     --------- ----- ------------
   -------
   ------
     -----------
   -------
 -------
--

----- ---------------
  --------------------- --------------
  --------------------
--

以上代码:

  1. 使用 Deno 内置的 TextEncoderTextDecoder 将 UTF-8 字符串编码为 Uint8Array 数组,并将其解码回字符串。
  2. 将 markdown 文件渲染为 HTML 字符串。
  3. 将 HTML 字符串编码为 Uint8Array 数组,并将其写入 index.html 文件。

在根目录中,运行:

- ---- --- -------

这个 DENO 命令会渲染 my-first-post.md 文件,并生成一个名为 index.html 的 HTML 文件。

步骤 4 - 生成多个 HTML 文件

如果要创建多篇文章,你要将 markdown 文件渲染为 HTML。可以尝试编写一个用于渲染 HTML 文件的辅助函数。

----- -------- ------------------ ------- -
  ----- ---- - ----------------------
  ----- -------- - --- -------------------------- ---------------------

  ----- ---- - -
  --------- -----
  ------
    ------
      ----- ----------------
      ----------------------
    -------
    ------
      -----------
    -------
  -------
  --

  ----- ---------------
    --------------------- ----------------
    --------------------
  --
-

这个函数将 markdown 文件渲染为 HTML,并在根目录中创建一个 HTML 文件。

步骤 5 - 自动生成静态博客

通常情况下,您将需要快速生成多个 HTML 文件。您可以使用 Deno 的 walkSync 函数来列出文件夹中的所有 markdown 文章,并使用 Promise.all() 函数在每个 markdown 文件上调用 generateHtml() 函数。

--- ----- ------ ----- -- ---------------------------------- ---------- -
  -- ------------- -- --------------------------- -
    ----- ---- - --------------------- -------- ------------
    ----------------------------------
  -
-

----- ----------------------

这个程序读取 posts 该文件夹中的所有 .md 文件,并使用 Promise.all() 函数在每个 markdown 文件上调用 generateHtml()

步骤 6 - 写入博客文章

最后,您需要将您的博客文章写入 posts 文件夹。 我们之前生成的 markdown 文件可以用入门样例。

- -- ------- ---- ----

------ ------ ------- -- -- ------- -----

你使用仓库工具,将新生成的 markdown 文件放进仓库,然后提交更改。

- --- --- -
- --- ------ -- --- ----- -------

推送更改。

- --- ----

现在您已经成功搭建了一个 Deno 静态博客!

总结

使用 Deno 搭建一个静态博客非常容易,本文介绍了如何完成这个过程。 Deno 带来不少的好处和 Node.js 没有的特性,而静态博客则将您从动态博客的网络安全问题和性能优化方面解放出来,但它同样美好的。

到这里,您已经了解了如何从头开始使用 Deno 构建一个静态博客,并部署到 Github Pages 上。此过程涉及文件系统操作,使用 Deno 中内置的网络库,将 markdown 文件转换为 HTML,以及添加Deploy Hooks,这些都会让你彻底了解静态博客的原理和基本操作方式。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/65a98015add4f0e0ff2dff53


猜你喜欢

  • Promise 链跟 Promise.all() 的使用场景与区别

    在前端开发中,我们经常会遇到需要处理异步操作的场景,比如从服务器获取数据或者执行一些需要时间的任务。在 JavaScript 中,我们可以使用 Promise 来更方便、清晰地处理这些异步操作。

    9 个月前
  • Custom Elements:生成高度可定制的元素

    Custom Elements:生成高度可定制的元素 介绍 Custom Elements 是一个新的 Web API,它允许开发者定义并注册自定义元素,并通过自定义元素扩展 HTML 标准,实现高度...

    9 个月前
  • Kubernetes Ingress 详解,让你轻松玩转负载均衡和路由

    Kubernetes 是一个用于容器编排的开源平台,它可以轻松地管理和运行容器化的应用程序,但是在处理负载均衡和路由时,Kubernetes 的默认行为可能不够灵活和高效。

    9 个月前
  • ESLint 报错解决:Parsing error: Unexpected token

    在前端开发过程中,我们经常会碰到“Parsing error: Unexpected token”的报错,这是由于代码中出现了不符合语法规范的语句,导致浏览器或 Node.js 无法正确解析。

    9 个月前
  • Serverless 框架中使用微信 / 企业微信进行消息推送

    近年来,Serverless 架构逐步成为了云计算领域的热门话题。通过将应用程序拆分为单个并且独立的函数,Serverless 具有低成本、高可靠性、灵活与应用无关的优势。

    9 个月前
  • ES10 中变量赋值使用数字分隔爆发错误的处理方法

    在ES10中,变量赋值使用数字分隔会出现错误。这个错误非常容易犯,导致程序语句无法解析或解析错误。本文将介绍出现这种错误的原因,以及如何避免和解决这种错误。 问题原因 ES10之前,JavaScrip...

    9 个月前
  • Hapi 实现 API 接口安全校验要点总结

    前端开发者在开发使用 API 接口时,如何保障 API 接口的安全是一个非常重要的问题。Hapi 是一个基于 Node.js 的服务端开发框架,它提供了一套强大的接口认证和授权机制来保证 API 接口...

    9 个月前
  • ES6 中的 Promise.race 和 Promise.all 方法的使用方式

    ES6 中的 Promise.race 和 Promise.all 方法的使用方式 JavaScript 中的 Promise 对象是一种非常强大的异步编程方式,它可以大大简化代码的复杂度,提高代码的...

    9 个月前
  • Sequelize 实现 MySQL 事务的方式详解

    Sequelize 实现 MySQL 事务的方式详解 在日常开发中,常常需要进行数据库事务处理,而 Sequelize 是一款常用的 Node.js ORM 框架,可以很好地配合 MySQL 数据库进...

    9 个月前
  • RESTful API 中手动实现版本控制的正确姿势

    在开发 RESTful API 的过程中,版本控制是非常重要的一部分。版本控制可以让我们灵活地添加新的功能,修复 bug,同时还可以保证 API 的稳定性和兼容性。

    9 个月前
  • 如何使用 React + GraphQL + PWA 开发 Web 应用

    随着 Web 应用程序的复杂性增加,对于前端开发人员来说,要求也越来越高。而 React、GraphQL 和 PWA 这三个技术则提供了一种理想的解决方案。本文将介绍如何使用这三个技术来构建现代的 W...

    9 个月前
  • SSE 与 WebSocket 性能对比分析

    简介 SSE(Server-Sent Events)和 WebSocket 都是前端开发中常用的实现服务器与客户端实时双向通信的技术。SSE 基于 HTTP,而 WebSocket 则是一种独立的协议...

    9 个月前
  • 如何使用 Cypress 测试自动化进行游戏测试

    如何使用 Cypress 测试自动化进行游戏测试 测试自动化是任何系统或应用程序测试中的重要步骤,尤其对游戏测试来说更是绕不开的难题。近年来,Cypress 库在前端自动化测试中一跃成为了当红明星,它...

    9 个月前
  • 如何使用 Node.js 实现基础的机器学习功能

    机器学习是当今最热门的技术领域之一,它是关于如何构建计算机程序,让它们利用经验来提高自己的性能的研究领域。通过机器学习,可以让计算机自动完成一些繁琐的任务,如图像识别、语音识别、自然语言处理等,并且不...

    9 个月前
  • Mongoose Schema 设计经验分享

    Mongoose 是 Node.js 里面非常流行的数据建模库,它简化了对 MongoDB 数据库的操作。在使用 Mongoose 进行开发的时候,Schema 是非常重要的一环,好的 Schema ...

    9 个月前
  • 实现响应式布局的技巧:Flexbox + media query

    响应式布局是现代Web开发中非常重要的一部分。为了适应不同设备的屏幕大小,我们需要设计出能够自动适应屏幕的布局。实现响应式布局的技巧有很多,但在这篇文章中我们会介绍一种广为使用的方法:Flexbox ...

    9 个月前
  • Webpack 实战教程:使用 Webpack 优化 React 应用

    随着 React 技术的普及,前端应用的体量逐渐变得越来越大,模块也越来越多,这时候我们就需要使用 Webpack 这一工具来帮助我们进行模块化的处理。 本篇文章将会介绍 Webpack 的使用方法,...

    9 个月前
  • ECMAScript 2020 新特性:动态 import 提升页面的性能和可维护性

    伴随着前端技术的不断发展,ECMAScript(简称 ES)也在不断地得到更新和完善。2020 年的 ECMAScript 规范中,新增了许多值得关注的特性,其中一个特别有用的特性是动态 import...

    9 个月前
  • Promise.then() 方法与 Promise.catch() 方法的使用注意事项

    介绍 Promise 是 JavaScript 中一种处理异步操作的方式,它可以更好地处理回调地狱的问题。Promise.then() 方法和 Promise.catch() 方法是 Promise ...

    9 个月前
  • MongoDB Limits and Skip 太大的问题及索引优化

    介绍 MongoDB 是一种使用文档存储方式的 NoSQL 数据库,其数据存储结构为 Bson。MongoDB 在处理诸如分布式集群、高负载和大规模读写等方面有着出色的性能表现。

    9 个月前

相关推荐

    暂无文章