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 g
或 hexo generate
hexo g -d
文件生成后立即部署网站
此命令会将_posts文件夹下的.md文章根据配置的主题渲染为html静态网页,当然只有变动的文件会被重新渲染,渲染完成后拷贝到根目录的public文件夹中。
错误:TypeError: Cannot set property ‘lastIndex’ of undefinedhexo 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 server
或 hexo 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 d
或 hexo 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配置就可以。
参考
如何搭建一个独立博客——简明Github Pages与Hexo教程
http://www.jianshu.com/p/05289a4bc8b2hexo系列教程:(二)搭建hexo博客
http://zipperary.com/2013/05/28/hexo-guide-2/
上一篇 SSH笔记
页面信息
location:
protocol
: host
: hostname
: origin
: pathname
: href
: document:
referrer
: navigator:
platform
: userAgent
: