Hexo 基本命令
blog
本文字数:1k 字 | 阅读时长 ≈ 4 min

Hexo 基本命令

blog
本文字数:1k 字 | 阅读时长 ≈ 4 min

1. Hexo 基本命令

  1. 初始化 hexo 文件:在本地任意创建一个文件夹(这里创建名字为 hexo-blog 的文件夹),用下面命令将其初始化
hexo init hexo-blog
cd hexo-blog
npm install
  1. 创建文章: 使用下面命令创建一篇文章,当 title 里面包含一些特殊字符时,我们可以加上双引号
hexo new post <title>
hexo new post "<title>"
  1. 生成静态文件: 生成静态的 html 文件等,方便查看和部署
hexo generate
hexo g
  1. 启动本地服务器: 启动本地服务器,查看生成的网页
# 默认网址: http://localhost:4000/
hexo server
hexo s #  简写
hexo s -p 5000  # 指定端口
  1. 部署网站: 将本地生成的网页部署到服务器端
hexo deploy
hexo g -d # 可以结合g一起使用,即生成静态网页后直接部署
  1. 清除缓存: 清除缓存文件(db.json)和已生成的静态文件(public),在某些情况下(例如更换主题后),如果对网站做操作网站没反应,可以使用此命令
hexo clean

2. Hexo 的基本逻辑

执行完 hexo init <folder> 命令之后,我们的文件夹如下所示

|-- _config.yml # 配置信息,可以在这里配置网站的大多数参数
|-- package.json # 查看hexo的版本以及相关依赖包的版本信息
|-- scaffolds # 模板文件夹,新建文章时,会根据这里的模板生成文件
|-- source # 资源文件夹
|   |-- _drafts # 草稿文件夹
|   |-- _posts # 文章文件夹
|-- themes # 主题文件夹,根据主题来生成静态页面

其中 source 是资源文件夹,用于存放用户资源,例如图片,文章等等,每次编译时,_post 文件夹下中的 md 文件会被编译为 html 文件并放到 public 文件夹下,其余非下划线开头的文件和文件夹会被原封不动的复制到 public 文件夹下

Hexo 生成静态文件

如上面所述,source 是资源文件夹,public 是自动生成的静态文件夹,在执行 hexo generate 后,会将 source 中的 md 文件转化为 html 文件,再结合主题渲染成为我们最终看到的博客。

执行 hexo clean 后会删除 db.jsonpublic 文件夹下的所有文件

3. 一些问题

3.1 hexo s 卡在 “Start processing” 不动

hexo s 一直卡住

INFO  Validating config
INFO  Start processing
# 然后没再出现 “Hexo is running at http://...” 之类的输出
Error: ENOSPC: System limit for number of file watchers reached, watch '/blog/hexo-blog/source/_posts/...'
    at FSWatcher.<computed> ...
    ...

不是磁盘满了,而是:Node / chokidar 想继续 watch 文件,系统的 ·inotify watcher· 上限(fs.inotify.max_user_watches)用光了

原因:hexo s时,会启动一个本地 Web 服务器监听项目目录中的文件变化,只要文件有改变,Hexo 会重新生成相关页面并通过 hexo-server 触发刷新。如果项目里放了大量图片 / 数据集 / Git 仓库,这些都被 chokidar watch 了,触发 Linux 上 inotify watcher 数量上限 —— 就会出现 ENOSPC

解决

  1. 从使用方式上规避
    在 VPS 上用静态模式 hexo s -s 或 Nginx 托管,不用 watch 功能,这个方案有个缺点,如果你更改本地文件,网页是不会更新的

  2. 从系统层面扩容
    提高 fs.inotify.max_user_watches,让系统能 watch 更多文件。

    cat /proc/sys/fs/inotify/max_user_watches
    echo "fs.inotify.max_user_watches=524288" >> /etc/sysctl.conf
    # 让配置生效
    sysctl -p
    
  3. 从配置层面精细控制监听
    _config.yml 中添加 watch_ignore,因为有很多文件是不需要被监听的,如果你只需要查看文章修改情况,只监听文章内容 _posts,忽略主题、node_modules、Git 仓库等。

    # 监听配置:只监听文章,不监听主题 / 大文件目录 / Git 仓库
    watch_ignore:
        # 依赖、生成输出
        - 'node_modules/**/*'
        - 'public/**/*'
    
        # 主题目录(不希望每次改主题都触发重建,可按需删掉)
        - 'themes/**/*'
    
        # Git 相关目录
        - '.git/**/*'
        - '.github/**/*'
        - '.deploy_git/**/*'
        - '.deploy.git/**/*'
        - 'blog.git/**/*'
    
        # 大型静态资源(按需调整)
        - 'source/images/**/*'
        - 'source/assets/**/*'
    
        # 大数据目录(按实际情况补充)
        - 'source/**/testing_data_final/**/*'
        - 'source/**/datasets/**/*'
        - 'fail/**/*'
    
12月 14, 2023
10月 06, 2021