Astro 是一个现代的静态网站生成器,它的目标是提供极快的加载速度、高性能和可维护性。如果你是一个前端开发者,正在寻找一个全新的构建网站的方式,那么你不容错过 Astro。在本文中,我们将探讨 Astro 的特点、使用方法,并演示如何开始使用 Astro 构建你的下一个项目。
什么是 Astro?
在开始之前,让我们先了解一下 Astro 是什么以及它为什么如此特殊。Astro 是一个静态网站生成器,但与传统的静态生成器不同,它允许你在需要的时候将部分页面转化为动态页面,同时保持整体性能。这意味着你可以拥有最佳的两个世界:静态站点的速度和动态站点的交互性。
开始使用 Astro
安装 Astro CLI
要开始使用 Astro,首先确保你已经安装了 Node.js 和 npm。
npm create astro@latest
这项命令完成后会自动进入项目创建向导:
选择项目模板
如上图所示,你可以选择三个模版之一,我这里选择Empty,生成的项目结构:
完善index.astro,这个页面将成为首页。
将完善后的index.astro文件中你认为 将会在关于页面,博客页面用到的相同的代码复制粘贴到一个在src文件夹下新建的layout布局文件中,并在你的 about.astro(关于页面), blog.astro(博客页面)中的frontmatter代码块导入并引用。
在每个页面创建样式 或者 更好的选择:创建全局样式表(global.css)
你可以在每个页面的 .astro 文件中创建不同的样式,为各个页面添加好看的外表。同时,一个更好的选择是提取每个页面都应该显示的样式,并为这些样式创建一个 .css 文件 作为全局样式表,然后在每个页面的 .astro 文件中的代码块引入。同时,你也可以在各个页面中定义独有的样式以增加多样性。
增加MarkDown文件——开始写博客文章
在src文件夹中创建新的文件夹,并在其中编写 .md 文件,同样这里也有一个代码块(用--- ---包围)。要想了解具体的frontmatter代码块编写,可以访问官网网址:Markdown | Front Matter
这里给出几个选项:
title | 标题 |
pubDate | 发布日期 |
description | 描述 |
author | 作者 |
tags | 标签 |
layout | 布局文件地址 |
大家可以选择性地添加。
尝试运行
此时大致的框架已经编写完成,让我们来试试运行吧!
npm run dev
额,为什么会出现乱码呢?Astro 官网上说 Astro项目 默认使用 UTF-8字符集,而使用UTF-8字符集不应该会出现上述乱码,让我们按下 F12 ,打开开发人员工具,看看发生了什么事:
我们可以在页面的HTML源代码看到,这个HTML是自动生成的,而从这个源代码中,我们可以看出并没有生成:
<meta charset='utf-8'>
那这种情况应该如何解决呢?—— 创建MarkDown文件的LayOut文件(布局文件)。
为MarkDown文件创建布局文件
创建MarkdownPostLayout.astro文件,
---
const { pageTitle } = Astro.props;
---
<html lang="zh-cn">
<head>
<meta charset="utf-8" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta name="viewport" content="width=device-width" />
<meta name="generator" content={Astro.generator} />
<title>{pageTitle}</title>
</head>
<body>
<h1>{pageTitle}</h1>
<slot />
</body>
</html>
这是一个常规的布局文件
并在你的 .md 文件的frontmatter代码块中引入这个布局文件:
layout: "../../layouts/MarkdownPostLayout.astro"
让我们再运行一遍:
npm run dev
可以看到我们的网页正常地显示了。
打开开发人员工具,我们可以看到生成的HTML源代码,与我们的布局文件如出一辙:
博客文章的数据是布局文件的
<slot></slot>
标签的位置插入的。
而布局文件中的代码块:
---
const { pageTitle } = Astro.props;
---
这里的 Astro.props 是 .md文件 代码块传来的数据,即我们在frontmatter中定义的数据,这里我们只使用里面的 title选项 作为我们的标题。
下面是我做的个人网站,如果对我做的网站感兴趣的话,可以到我的Github仓库中 Clone 下来:https://github.com/flaskbott/AstroLearning
可能不够好看,请大家多多包涵。
截图:
里面增加了霓虹元素。