Hexo目录结构
作者: 時光
原文: https://blog.shiguang666.eu.org/2024/06/23/41b06aa956d4
来源: 時光的博客园子
Hexo 是一个基于 Node.js 的静态博客框架,它允许用户通过 Markdown 文件快速生成静态网页。
Hexo 目录结构
Hexo 的目录结构清晰,便于管理和扩展。以下是 Hexo 项目的基本目录结构:
.
├── .deploy_git
├── node_modules
├── public
├── scaffolds
| ├── post.md
| ├── page.md
| └── draft.md
├── source
| ├── _drafts
| └── _posts
├── themes
| └── theme-name
| ├── _config.yml
| ├── languages
| ├── layout
| ├── scripts
| └── source
├── _config.yml
├── _config.theme-name.yml
├── package.json
├── yarn.lock
└── package-lock.json
目录
node_modules
存放通过 npm 安装的 Node.js
模块。这些模块包括 Hexo 核心模块以及用户安装的插件和主题。当你执行hexo init
命令进行初始化时内部会执行npm install
命令生成该目录文件。
public
这是 Hexo 生成静态文件的目录。如果你想快速部署博客站点,仅需将该目录下文件上传到wwwroot目录即可
当你运行 hexo generate
或hexo g
命令时,Hexo 会将 source
目录下的 Markdown 文件和模板渲染成 HTML 文件,并存放在这里。
当你执行 hexo clean
命令时,该目录下的文件会被清理。
当你执行hexo deploy
或hexo d
命令时,该目录下的文件会被部署到远程仓库。
scaffolds
这个目录包含了文章模板,当你使用 hexo new
命令创建新文章时,Hexo 会根据这里的模板生成文章的 Markdown 文件。例如,如果你有一个名为 post.md
的模板,当你运行 hexo new post "My New Post"
时,Hexo 会在 source/_posts
目录下创建一个名为 My-New-Post.md
的文件,并使用 post.md
模板的内容作为基础。
- post.md: 这是创建新文章时使用的默认模板。当你运行
hexo new post "My New Post"
或者不指定模板hexo new "My New Post"
时,Hexo 会根据post.md
模板生成一个新的 Markdown 文件,并将其存放在source/_posts
目录下。 - draft.md: 这是创建新草稿文章时使用的模板。当你运行
hexo new draft "My New Draft"
时,Hexo 会根据draft.md
模板生成一个新的 Markdown 文件,并将其存放在source/_drafts
目录下。 - page.md: 这是创建新页面时使用的模板。当你运行
hexo new page "My New Page"
时,Hexo 会根据page.md
模板生成一个新的 Markdown 文件,并将其存放在source/page/My-New-Page
目录下。 在 Hexo 中,页面通常指的是那些不需要按照时间顺序排列的静态内容,如关于我、联系方式等。每个页面通常有自己的文件夹,文件夹名即为页面名。例如,如果你想创建一个名为about
的页面,你可以在source/page/about
目录下创建一个 Markdown 文件,Hexo 会自动将其渲染成一个页面。
source
这是存放用户资源的主要目录。
- _drafts:草稿文章存放的目录。草稿文章默认不会在生成静态网页时被包含。你可以通过设置
publish_drafts: true
在_config.yml
中来改变这一行为。这些文章不会在运行hexo generate
或hexo server
时被渲染。 - _posts:正式发布的文章存放的目录。这些文章会被渲染并包含在生成的静态网页中。
在 source
目录下,存放非文章类型的页面。你还可以创建其他目录来组织你的内容,如图片、视频等。
themes
这个目录用于存放主题文件。Hexo 支持自定义主题,你可以在这个目录下放置不同的主题文件夹,每个文件夹内包含该主题的 _config.yml
配置文件和相关的模板、样式和脚本文件。
每个主题都有一个独立的目录,目录名通常是主题的名称。例如,如果你使用的是 landscape
主题,那么目录结构可能如下:
themes/
└── landscape
├── _config.yml
├── languages
├── layout
├── scripts
└── source
- _config.yml: 主题的配置文件,允许用户根据个人喜好调整主题的设置。
- languages: 存放语言文件,用于国际化。
- layout: 存放主题的模板文件,如
index.ejs
,post.ejs
等。 - scripts: 存放主题的脚本文件。
- source: 存放主题的资源文件,如样式表(CSS)、图片等。
文件
.deploy_git
当使用 hexo deploy
命令部署到 Git 仓库时,生成的文件会临时存放在这里。
_config.yml
这是 Hexo 的全局配置文件,用于配置网站的基本信息,如网站标题、描述、作者、URL 等,此外,还有关于主题、插件、分页、日期格式、分类和标签等的配置。以及一些插件和主题的设置。
-
title: 网站标题
-
subtitle: 网站副标题
-
description: 网站描述
-
author: 作者名字
-
language: 网站语言
-
timezone: 网站时区
-
url: 网站的 URL
更多配置信息可参考官网说明文档
_config.theme-name.yml
是 Hexo 主题的配置文件,其中 theme-name
应替换为实际使用的主题名称。这个文件允许用户在不修改主题源文件的情况下,调整主题的设置。每个主题可以有自己的配置文件,这样用户可以根据自己的喜好和需求来定制主题的行为和外观。更多详细内容可查阅使用代替主题配置文件。
package.json
这个文件包含了 Hexo 及其插件和主题的元数据和依赖信息。通过这个文件,可以使用 npm 来安装和管理这些依赖。这个文件是 Node.js 项目的标准配置文件,它包含了项目的元数据(如名称、版本、描述等)和依赖项。当你运行 npm install
时,npm 会根据这个文件安装所需的模块。
{
"name": "hexo-site",
"version": "0.0.0",
"private": true,
"hexo": {
"version": "4.2.0"
},
"dependencies": {
"hexo": "^4.2.0",
"hexo-deployer-git": "^2.1.0",
"hexo-generator-archive": "^1.0.0",
"hexo-generator-category": "^1.0.0",
"hexo-generator-index": "^1.0.0",
"hexo-generator-tag": "^1.0.0",
"hexo-renderer-ejs": "^1.0.0",
"hexo-renderer-marked": "^3.0.0",
"hexo-renderer-stylus": "^1.1.0",
"hexo-server": "^1.0.0"
}
}
yarn.lock
- 生成工具: Yarn
- 作用:
yarn.lock
文件记录了项目中所有依赖的确切版本信息,包括直接依赖和间接依赖。这确保了无论在哪个开发环境或部署环境中,只要使用 Yarn 安装依赖,都能得到相同的依赖版本。 - 使用场景: 当你使用 Yarn 安装或更新依赖时,Yarn 会自动更新
yarn.lock
文件。这个文件应该被提交到版本控制系统中,以保证团队成员或持续集成/部署系统能够安装相同的依赖版本。
package-lock.json
- 生成工具: npm
- 作用:
package-lock.json
文件同样记录了项目中所有依赖的确切版本信息,包括直接依赖和间接依赖。它确保了无论在哪个环境中使用 npm 安装依赖,都能得到相同的依赖版本。 - 使用场景: 当你使用 npm 安装或更新依赖时,npm 会自动更新
package-lock.json
文件。这个文件也应该被提交到版本控制系统中,以保证团队成员或持续集成/部署系统能够安装相同的依赖版本。
yarn.lock 与 package-lock.json 区别与注意事项
- 兼容性:
package-lock.json
是 npm 5.x 及以上版本的特性,而yarn.lock
是 Yarn 的特性。如果你在项目中同时使用了 npm 和 Yarn,通常只需要保留其中一个锁定文件。 - 选择: 项目中应该选择使用 npm 还是 Yarn,通常取决于团队的偏好和工具链。一旦选择了包管理器,就应该坚持使用其对应的锁定文件。
- 版本控制: 两个锁定文件都应该被包含在版本控制中,但不应该被手动修改。它们应该由包管理器自动更新。
- 冲突解决: 如果项目中同时存在
yarn.lock
和package-lock.json
,可能会导致冲突或不一致。通常建议团队选择一个包管理器,并删除另一个包管理器生成的锁定文件。
参考