当前位置 : 首页 » 文章分类 :  开发  »  Hexo博客(02)安装Hexo生成博客并部署到GitHub

Hexo博客(02)安装Hexo生成博客并部署到GitHub

hexo 安装、升级、生成博客、部署相关笔记。


安装Git

Windows 系统中,从 Git 官网 https://git-scm.com/downloads 或 msysgit(Git for Windows) https://git-for-windows.github.io 下载并安装 Git for Windows.
安装后就有了 Git Bash 命令行工具。


安装Node.js

从 Node.js 官网 https://nodejs.org/en/ 下载并安装 Windows 版。安装 Node.js 之后 Git Bash 中就有了 npm 命令。

npm设置代理(不需要可跳过)

由于公司上网需要挂代理,不设置 npm 代理无法下载 hexo 安装包,注意http代理和https代理都要设
Git Bash命令:
npm config set proxy=http://172.17.18.80:8080
npm config set https-proxy=http://172.17.18.80:8080
查看代理设置是否成功:
npm config get https-proxy


安装Hexo

Git Bash命令:
npm install -g hexo-cli
安装结束后提示:

npm WARN optional Skipping failed optional dependency /hexo-cli/chokidar/fsevents:
npm WARN notsup Not compatible with your operating system or architecture: fsevents@1.1.2

原因是 fsevent 是在 macOS 下的依赖包,当前是 64 位 win 系统,因此只报 warning 信息,无影响。


升级Hexo版本

npm update升级hexo到3.4.4

使用 npm 包管理工具来升级 hexo 到当前最新版本 npm update hexo
例如:

MaSi@MaSi-Dell MINGW64 /d/git/madaimeng_backup (master)
$ npm update hexo
- jsonify@0.0.0 node_modules\jsonify
- nan@2.7.0 node_modules\nan
- dtrace-provider@0.8.5 node_modules\dtrace-provider
- bunyan@1.8.12 node_modules\bunyan
- json-stable-stringify@1.0.1 node_modules\json-stable-stringify
hexo-site@0.0.0 D:\git\madaimeng_backup
`-- hexo@3.4.4

npm WARN optional Skipping failed optional dependency /chokidar/fsevents:
npm WARN notsup Not compatible with your operating system or architecture: fsevents@1.1.3

升级后再次执行 hexo g 时,会自动将更新后的hexo版本号写入package.json文件。

升级hexo到指定的3.9.0版本

先修改 package.json 中的 hexo 依赖版本为 3.9.0

"dependencies": {
  "hexo": "^3.9.0",
  ...
}

然后执行 sudo npm install --unsafe-perm

注意:mac上更新时必须加 --unsafe-perm 参数,否则会报很多 permission denied 错误

$ sudo npm install --unsafe-perm
Password:

> fsevents@1.2.9 install /Users/si.ma/git/madaimeng_backup/node_modules/hexo-fs/node_modules/fsevents
> node install

node-pre-gyp WARN Using needle for node-pre-gyp https download
[fsevents] Success: "/Users/si.ma/git/madaimeng_backup/node_modules/hexo-fs/node_modules/fsevents/lib/binding/Release/node-v64-darwin-x64/fse.node" is installed via remote

> fsevents@1.2.9 install /Users/si.ma/git/madaimeng_backup/node_modules/nunjucks/node_modules/fsevents
> node install

node-pre-gyp WARN Using needle for node-pre-gyp https download
[fsevents] Success: "/Users/si.ma/git/madaimeng_backup/node_modules/nunjucks/node_modules/fsevents/lib/binding/Release/node-v64-darwin-x64/fse.node" is installed via remote
added 138 packages from 35 contributors and audited 7136 packages in 7.598s
found 6 vulnerabilities (2 low, 3 moderate, 1 high)
  run `npm audit fix` to fix them, or `npm audit` for details

安装完成后 hexo -v 查看 hexo 版本

$ hexo -v
(node:89464) [DEP0061] DeprecationWarning: fs.SyncWriteStream is deprecated.
hexo: 3.9.0
hexo-cli: 1.1.0
os: Darwin 17.7.0 darwin x64
http_parser: 2.8.0
node: 10.4.0
v8: 6.7.288.43-node.7
uv: 1.20.3
zlib: 1.2.11
ares: 1.14.0
modules: 64
nghttp2: 1.29.0
napi: 3
openssl: 1.1.0h
icu: 61.1
unicode: 10.0
cldr: 33.0
tz: 2018c

升级hexo-renderer-marked到1.0.1

3.9.0 中默认将 hexo-renderer-marked 升级到了 1.0.1 了,但是我更新 hexo 后 hexo-renderer-marked 并没有跟着更新,还是手动更新了一下
先修改 package.json 将其中 hexo-renderer-marked 的版本改为 1.0.1

"hexo-renderer-marked": "^1.0.1",

然后 npm 更新
sudo npm update hexo-renderer-marked

$ sudo npm update hexo-renderer-marked
Password:
+ hexo-renderer-marked@1.0.1
updated 2 packages and audited 7135 packages in 3.387s
found 6 vulnerabilities (3 low, 2 moderate, 1 high)
  run `npm audit fix` to fix them, or `npm audit` for details

npm-check-updates升级hexo到5.4.0

1、安装 npm-check-updates

npm install -g npm-check-updates

2、进入 package.json 所在目录,执行 ncu 检查 package.json 中依赖的可用版本更新
这里以 hexo 为例:

# ncu
Checking /home/centos/git/hexo/package.json
[====================] 12/12 100%

 hexo                     ^3.9.0  →  ^5.4.0
 hexo-deployer-git        ^0.1.0  →  ^3.0.0
 hexo-generator-archive   ^0.1.4  →  ^1.0.0
 hexo-generator-category  ^0.1.3  →  ^1.0.0
 hexo-generator-index     ^0.2.0  →  ^2.0.0
 hexo-generator-tag       ^0.2.0  →  ^1.0.0
 hexo-renderer-ejs        ^0.2.0  →  ^1.0.0
 hexo-renderer-marked     ^1.0.1  →  ^4.0.0
 hexo-renderer-stylus     ^0.3.1  →  ^2.0.1
 hexo-server              ^0.2.0  →  ^2.0.0
 hexo-tag-bootstrap        0.0.8  →   0.2.1
 hexo-wordcount           ^2.0.1  →  ^6.0.1

Run ncu -u to upgrade package.json

3、进入 package.json 所在目录,执行 ncu -u 可以更新 package.json 中的依赖版本到最新。
之后再执行 npm install 根据 package.json 中的版本号更新依赖包。

注意:ncu -u 只是更新 package.json 文件中的版本号,并不是真的安装依赖包的新版本,之后还需执行 npm install 来安装更新。

4、查看hexo版本号

# hexo version
INFO  Validating config
WARN  Deprecated config detected: "external_link" with a Boolean value is deprecated. See https://hexo.io/docs/configuration for more details.
ERROR {
  err: /home/centos/git/hexo/node_modules/hexo-tag-bootstrap/input.js:8
  <div class="form-group">
  ^

  SyntaxError: Unexpected token '<'
      at Module._compile (internal/modules/cjs/loader.js:895:18)
      at Object.Module._extensions..js (internal/modules/cjs/loader.js:995:10)
      at Module.load (internal/modules/cjs/loader.js:815:32)
      at Function.Module._load (internal/modules/cjs/loader.js:727:14)
      at Module.require (internal/modules/cjs/loader.js:852:19)
      at req (/home/centos/git/hexo/node_modules/hexo/lib/hexo/index.js:292:23)
      at /home/centos/git/hexo/node_modules/hexo-tag-bootstrap/index.js:14:23
      at /home/centos/git/hexo/node_modules/hexo/lib/hexo/index.js:305:14
      at tryCatcher (/home/centos/git/hexo/node_modules/bluebird/js/release/util.js:16:23)
      at Promise._settlePromiseFromHandler (/home/centos/git/hexo/node_modules/bluebird/js/release/promise.js:547:31)
      at Promise._settlePromise (/home/centos/git/hexo/node_modules/bluebird/js/release/promise.js:604:18)
      at Promise._settlePromise0 (/home/centos/git/hexo/node_modules/bluebird/js/release/promise.js:649:10)
      at Promise._settlePromises (/home/centos/git/hexo/node_modules/bluebird/js/release/promise.js:729:18)
      at _drainQueueStep (/home/centos/git/hexo/node_modules/bluebird/js/release/async.js:93:12)
      at _drainQueue (/home/centos/git/hexo/node_modules/bluebird/js/release/async.js:86:9)
      at Async._drainQueues (/home/centos/git/hexo/node_modules/bluebird/js/release/async.js:102:5)
      at Immediate.Async.drainQueues [as _onImmediate] (/home/centos/git/hexo/node_modules/bluebird/js/release/async.js:15:14)
      at processImmediate (internal/timers.js:439:21)
} Plugin load failed: %s hexo-tag-bootstrap
hexo: 5.4.0
hexo-cli: 4.2.0
os: Linux 3.10.0-957.1.3.el7.x86_64 linux x64
node: 12.14.0
v8: 7.7.299.13-node.16
uv: 1.33.1
zlib: 1.2.11
brotli: 1.0.7
ares: 1.15.0
modules: 72
nghttp2: 1.39.2
napi: 5
llhttp: 1.1.4
http_parser: 2.8.0
openssl: 1.1.1d
cldr: 35.1
icu: 64.2
tz: 2019c
unicode: 12.1

解决 hexo-tag-bootstrap 插件问题,降级到 0.0.8 版本

npm uninstall hexo-tag-bootstrap
npm install --save hexo-tag-bootstrap@0.0.8

初始化Hexo并安装依赖

建立一个存放Hexo文件的文件夹(如D:\Files\Hexo)
Git Bash进入此文件夹:
cd /d/Files/Hexo/
初始化Hexo:
hexo init
根据package.json安装依赖:
npm install
初始化完成后Hexo文件夹中的层次为:

.
├── _config.yml
├── package.json
├── scaffolds
├── source
|   ├── _drafts
|   └── _posts
└── themes
  • _config.yml:网站的 配置 信息,您可以在此配置大部分的参数。
  • package.json:应用程序的信息。EJS, Stylus 和 Markdown renderer 已默认安装,您可以自由移除。
  • scaffolds:模版 文件夹。当您新建文章时,Hexo 会根据 scaffold 来建立文件。
  • source:资源文件夹是存放用户资源的地方。除 _posts 文件夹之外,开头命名为 _ (下划线)的文件/文件夹和隐藏的文件将会被忽略。Markdown 和 HTML 文件会被解析并放到 public 文件夹,而其他文件会被拷贝过去。
  • themes:主题 文件夹。Hexo 会根据主题来生成静态页面。

修改博客配置_config.yml

站点配置

# Site
title: masikkk's blog
subtitle:
description:
author: masikkk
language: zh-CN
timezone:

URL配置

# URL
## If your site is put in a subdirectory, set url as 'http://yoursite.com/child' and root as '/child/'
url: http://masikkk.com
root: /
permalink: :year/:month/:day/:title/
permalink_defaults:

部署配置

# Deployment
## Docs: https://hexo.io/docs/deployment.html
deploy:
  type: git
  repo: ssh://git@github.com/masikkk/masikkk.github.io.git
  branch: master

配置问题

  • 注意:repo要使用ssh协议地址,否则部署出错。
  • 配置项冒号后要加一个空格,否则generate时会出错:
    $ hexo g
    FATAL end of the stream or a document separator is expected at line 11, column 9:
      timezone:
              ^
    YAMLException: end of the stream or a document separator is expected at line 11, column 9:
      timezone:
    

hexo g生成博客

生成博客,命令:
hexo ghexo generate
hexo g -d 文件生成后立即部署网站
此命令会将_posts文件夹下的.md文章根据配置的主题渲染为html静态网页,当然只有变动的文件会被重新渲染,渲染完成后拷贝到根目录的public文件夹中。

错误:TypeError: Cannot set property ‘lastIndex’ of undefined
hexo g生成博客时遇到错误:

TypeError: Cannot set property 'lastIndex' of undefined

刚开始上百度查,总是查不到点上,后来用了新出的搜狗英文搜索,一击命中。
解决方法是在配置文件_config.yml中将highlight选项的auto_detect设为false,完美解决。参考Hexo 3.2.0-beta.2 test result report #1627


hexo s本地预览

启动hexo本地服务器hexo serverhexo s

$ hexo s
INFO  Start processing
INFO  Hexo is running at http://localhost:4000/. Press Ctrl+C to stop.

在浏览器输入 http://localhost:4000/ 进行预览,回到Git Bash输入Ctrl+C关闭本地服务器退出预览。

指定端口:
hexo s -p 8080

自定义 IP
服务器默认运行在 0.0.0.0,您可以覆盖默认的 IP 设置,如下:
hexo server -i 192.168.1.1
指定这个参数后,您就只能通过该IP才能访问站点。例如,对于一台使用无线网络的笔记本电脑,除了指向本机的127.0.0.1外,通常还有一个192.168.*.*的局域网IP,如果像上面那样使用-i参数,就不能用127.0.0.1来访问站点了。对于有公网IP的主机,如果您指定一个局域网IP作为-i参数的值,那么就无法通过公网来访问站点。


hexo d部署

简单说一下部署到底是个什么操作,其实很简单,就是将第6步hexo g生成的public文件夹下的全部内容上传到远程仓库,就这么简单。public文件夹内都是生成的静态html页面和需要的资源,所以如果想在自主服务器的容器(比如jboss或tomcat)中部署,只需要将public文件夹下的全部内容拷贝到容器的部署目录中(比如tomcat的webapps目录)即可。

1、在_config.yml中添加部署配置

例如配置GitHub的Pages仓库:

# Deployment
## Docs: https://hexo.io/docs/deployment.html
deploy:
  type: git
  repo: ssh://git@github.com/masikkk/masikkk.github.io.git
  branch: master

2、安装Git部署器

Git Bash:npm install hexo-deployer-git --save
如果不安装相应的部署器,部署时提示:

$ hexo d
ERROR Deployer not found: git

3、部署到GitHub pages

命令:
hexo dhexo deploy
hexo d -g 部署之前预先生成静态文件

$ hexo d
INFO  Deploying: git
INFO  Clearing .deploy_git folder...
INFO  Copying files from public folder...
[master 6c43d52] Site updated: 2016-03-30 14:56:56
2 files changed, 2 insertions(+), 2 deletions(-)
Branch master set up to track remote branch master from ssh://git@github.com/masikkk/masikkk.github.io.git.
To ssh://git@github.com/masikkk/masikkk.github.io.git
   8a230a0..6c43d52  HEAD -> master
INFO  Deploy done: git

Git部署失败

出了一堆错误提示,核心的一句是:

fatal: could not read Username for 'https://github.com': Invalid argument

解决:当时使用git push已经可以成功向GitHub提交代码,但是hexo deploy还是出错,直到在_config.yml中将repo仓库地址改为ssh协议,才部署成功

部署后原来的CNAME文件被覆盖

解决:CNAME,README,404.html都可以放在Hexo/source文件夹下,hexo g生成博客时会被原封不动的拷贝到public文件夹中,部署后自然就到了项目的根目录。

同时部署到coding和GitHub

如果想每次hexo d部署时可以同时部署到GitHub和Coding。
编辑博客根目录中的_config.yml配置文件,修改deploy配置,可同时使用多个deployer,Hexo会依照顺序执行每个deployer。
官网上给出的多部署配置方式如下:

deploy:
- type: git
  repo: ssh://git@github.com/masikkk/masikkk.github.io.git
  branch: master
- type: git
  repo: git@git.coding.net:masikkk/masikkk.git
  branch: coding-pages

注意Coding的部署分支为coding-pages,根据测试,不加ssh://协议名也是可以的。

deploy时指定git账户

能否hexo deploy 时指定git账户
https://github.com/hexojs/hexo/issues/2125

1、修改 _config.yml 配置文件

deploy:
- type: git
  repo: git@git.coding.net:masikkk/madaimeng.git
  branch: master
  name: masikkk
  email: xxx@example.com
- type: git
  repo: git@github.com:masikkk/madaimeng.git
  branch: master
  name: masikkk
  email: xxx@example.com

修改后又删除了 .deploy_git 文件夹,导致之前所有的commit log都没有了,但 提交的用户名还是 全局的git user.name user.email

2、修改“/hexo/.deploy_git/.git/config”文件中的name和email
修改后就好了,其实感觉直接修改这个git配置就可以。


参考


上一篇 SSH笔记

下一篇 Hexo博客(01)GitHub Pages创建博客并绑定域名

阅读
评论
3.1k
阅读预计15分钟
创建日期 2016-03-22
修改日期 2021-07-18
类别

页面信息

location:
protocol:
host:
hostname:
origin:
pathname:
href:
document:
referrer:
navigator:
platform:
userAgent:

评论