我是这样用Nodejs的hexo的

我是这样用Nodejs的hexo的

在本地和服务器上都装一下,然后服务器上放一个repo,本地只用git管理src下的内容,忽略掉template(另外clone)config.yml以及build中的内容。 每次更新,push到服务器上之后触发githook,在服务器端进行生成。 然后遇到了一个问题就是输出进度的代码有一行写的是 stdout.clearLine() (现在好像改成term.clearLine)了,这样因为提交代码的时候stdout指向的是一个socket连接,没有clearLine方法,就抛错了,自己简单fix了一下。 后来发现hexo是只是rsync的,但是我在考虑的就是本地生成的话就要把config写成localhost才能检查各链接是否正常,但是服务器上的配置写localhost肯定是不行的,不知道官方推荐的做法是什么样的。


3 回复

我是这样用Node.js的Hexo的

简介

Hexo 是一个快速、简洁且高效的博客框架。本文将分享我如何在本地和服务器上使用 Hexo,并介绍一些遇到的问题及解决方案。

部署流程

  1. 环境搭建

    • 在本地和服务器上安装 Node.js 和 Hexo。
      # 安装 Node.js
      sudo apt-get update
      sudo apt-get install nodejs
      
      # 安装 Hexo
      npm install -g hexo-cli
      
  2. 项目结构

    • 在本地创建一个 Hexo 项目,并通过 Git 管理 src 目录的内容。
    • 忽略 template 文件夹(可以从其他地方单独克隆),并忽略 config.ymlbuild 目录。
      # 创建 Hexo 项目
      hexo init myblog
      cd myblog
      
      # 初始化 Git 仓库
      git init
      git add .
      git commit -m "Initial commit"
      
  3. Git Hook 配置

    • 在服务器上设置一个 Git 仓库,并配置 Git Hook,在每次推送时触发生成操作。
      # 服务器上创建 Git 仓库
      mkdir /path/to/repo
      cd /path/to/repo
      git init --bare
      
      # 本地添加远程仓库
      git remote add origin user@server:/path/to/repo.git
      
      # 配置 Git Hook
      echo 'cd /path/to/repo && hexo generate' > hooks/post-receive
      chmod +x hooks/post-receive
      
  4. 解决stdout.clearLine问题

    • stdout.clearLine() 方法在某些情况下会报错,可以使用 term.clearLine() 替代。
      // 示例代码
      const term = require('terminal-kit').terminal;
      
      // 原来的代码
      // stdout.clearLine();
      
      // 修改后的代码
      term.clearLine();
      
  5. 多环境配置

    • 在不同环境中使用不同的配置文件(如 config.local.ymlconfig.server.yml)来管理不同的配置项。

      # config.local.yml
      url: http://localhost:4000
      
      # config.server.yml
      url: http://yourdomain.com
      
    • 在部署时根据环境选择相应的配置文件:

      # 本地生成
      hexo config --file config.local.yml
      hexo generate
      
      # 服务器生成
      hexo config --file config.server.yml
      hexo generate
      

总结

通过上述步骤,可以在本地和服务器上高效地使用 Hexo 进行博客的管理和发布。希望这些经验对你有所帮助!


在服务器端生成啥意思? 不是应该在本地生成html的么?

如何使用 Node.js 和 Hexo

Hexo 是一个快速、简单的静态站点生成器。它可以帮助你在本地开发并生成静态网站,然后部署到服务器上。以下是如何使用 Node.js 和 Hexo 的一些基本步骤。

安装和配置

  1. 安装 Node.js: 确保你已经在本地机器和服务器上安装了 Node.js。可以通过以下命令来安装:

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
    nvm install node
    
  2. 安装 Hexo: 在本地机器上全局安装 Hexo:

    npm install -g hexo-cli
    
  3. 初始化项目: 在你的项目目录中初始化一个新的 Hexo 项目:

    hexo init my-blog
    cd my-blog
    npm install
    
  4. 忽略不需要的文件: 在 .gitignore 文件中添加忽略项:

    # 忽略模板文件
    template/
    # 忽略配置文件
    config.yml
    # 忽略构建结果
    public/
    
  5. 配置 Git 钩子: 在服务器上创建一个 Git 仓库,并设置 post-receive 钩子:

    mkdir /path/to/repo
    cd /path/to/repo
    git init --bare
    echo "cd /path/to/repo && hexo generate" > hooks/post-receive
    chmod +x hooks/post-receive
    
  6. 本地推送代码: 在本地将代码推送到服务器:

    git remote add origin user@server:/path/to/repo.git
    git push origin master
    

生成和部署

在服务器上,每次推送都会触发 post-receive 钩子,自动执行 hexo generate 命令生成静态文件。

# 服务器上的钩子脚本
#!/bin/bash
cd /path/to/repo
hexo clean
hexo generate

处理 stdout 问题

关于 stdout.clearLine() 方法的错误,你可以通过检查当前环境来避免这个问题。例如:

if (typeof process.stdout.clearLine === 'function') {
  process.stdout.clearLine();
}

或者使用其他库如 terminal-kit 来处理终端操作:

npm install terminal-kit
const term = require('terminal-kit').terminal;
term.clearLine();

配置文件

对于不同环境的配置文件,你可以使用 hexo-config-multiple-env 插件来管理不同的配置环境。

npm install hexo-config-multiple-env --save

config.yml 中配置不同环境:

multiple_env:
  default: development
  environments:
    production:
      deploy_to: "/path/to/public"
    development:
      deploy_to: "/path/to/local/public"

总结

通过上述步骤,你可以更好地管理和部署基于 Hexo 的静态网站。确保你的代码和配置文件能够正确处理不同的环境,以实现无缝的开发和部署流程。

回到顶部