本文目录

文首语

努力让每个跌在Hexo坑里的人爬起来 ==!。

Hexo是一个基于Nodo.js的轻量级博客框架,中文的官方文档可以看这里(这里也包括了如何安装和使用),但是建议在安装前阅读本文,以减少可能的安装与应用错误。

Hexo在masOS上的主要问题就两个:

  • Git
  • 权限(主要集中在NPM上)

安装前必读

环境

  • macOS在安装前务必安装好Xcode,如果不安装好,有可能出现各种编译问题,包括git命令,实际上都需要Xcode支持。

  • npm的安装,不解释,官方源不能用,所以初步在安装完nodo.js后,推荐立刻将npm源更新为淘宝源,这里提供了三种方案:

通过config命令:

1
2
$ npm config set registry https://registry.npm.taobao.org
$ npm info underscore //如果上面配置正确这个命令会有字符串response

通过命令行进行指定:

1
$ npm --registry https://registry.npm.taobao.org info underscore

编辑~/.npmrc加入以下内容(淘宝源):

1
registry = https://registry.npm.taobao.org

以上三种方案只需要配置一次即可。

注意,如果你在国内,这一步是必要的。否则在使用NPM的路上,呵呵呵。

1
2
3
{ [Error: Cannot find module './build/Release/DTraceProviderBindings'] code: 'MODULE_NOT_FOUND' }
{ [Error: Cannot find module './build/default/DTraceProviderBindings'] code: 'MODULE_NOT_FOUND' }
{ [Error: Cannot find module './build/Debug/DTraceProviderBindings'] code: 'MODULE_NOT_FOUND' }

这三行错误是因为 DTrace 错误 (Mac OS X)

在此基础上,官方给出了一个简洁的安装方案,只需要执行:

1
$ sudo npm install hexo —no-optional

简洁安装hexo。

而实际上,只要:

用国内源把dtrace-prodider这个插件装好,或者找到之前node_modules,放到新的目录下,大约50MB。

所以在安装、使用时遇到错误,请记得用国内淘宝源进行更新,比如说会遇到的swig报错,需要用npm重新安装、升级。

命令权限

关于频繁输入SUDO的问题:

//2017.07.31更新

NPM在安装node.js和一些组件的时候,在Mac上需要正确的权限安装,正确安装后,执行命令无需再sudo,按照官方推荐的方案官方文档戳我

文章列出了两种方法,第一种就是修改 /usr/local/node_modules/usr/local/bin/usr/local/share 这三个目录的 owner:

1
$ sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}

这种方法适合这台电脑只有一个开发者使用的场景。

但是我司还有一台电脑是公共的,可以让不同的开发者临时使用,那么就是用方法二:

1
2
$ mkdir ~/.npm-global
$ npm config set prefix '~/.npm-global'

然后修改你的 .profile 或者 .zshrc(像我这样用zsh的话),添加:

1
$ export PATH=~/.npm-global/bin:$PATH

根据 ~/.profile 内容更新当前 Shell:

1
$ source ~/.profile`

从此以后 npm install -g 安装的模块就都会到该用户名字下面的 ~/.npm-global 目录中,这样就做到了用户隔离。

Git常见问题

Permission denied

这是遇到的最常见问题,网上有很多解决方案,比较常见的是清空.deploy_git文件夹,然后重新生成,实际上这样的方案很蠢。
遇到这个错误,首先要做的是进行错误定位,测试问题出在哪儿:
ssh -T git@目标主机
如果提示验证成功,比如Gitea会提示:

1
2
Hi there, You've successfully authenticated, but Gitea does not provide shell access.
If this is unexpected, please log in with password and setup Gitea under another user.

说明你的ssh key并没有问题。
这时候需要检查~/.ssh目录下的config配置文件,这个配置文件是为了存在多个ssh key时进行ssh key管理的。
config的配置规则如下:

1
2
3
4
5
Host hostname #识别id,既在ssh命令时链接的地址标记
HostName www.xxx.com
Port 22
User root #这里记得修改为git用户
IdentityFile ~/.ssh/xxx #指定文件

可以在config文件中配置多个。
检查没有问题后,而依然出现这种问题的,大多数是同步了目录,在其他电脑上重新部署,希望多个地点更新hexo存在的问题,发生这样的问题主要是因为git的配置文件引起的,可以到/.deploy_git/.git目录中找到git的config文件进行检查,检查其中对remote的描述,是否同本地sshconfig中的Host hostname命名一致。

后来问题依旧,GOOGLE到了一个方案,解决了这个问题,在本机添加一下SSH KEY

1
$ ssh-add ~/.ssh/github_rsa

关于这个问题,后来经过查资料,引起的主要原因是因为在执行生成发布服务的时候,前文用了sudo指令,这个命令只能临时的解决问题,所以要么把 ssh-add写到bash里,开启终端时自动完成,要么采用:

1
$ ssh-add -K ~/.ssh/github_rsa

指令,将sshkey储存到MAC的钥匙串管理中,这样当其他程序请求sshkey的时候会向Keychain请求秘钥。

一些有趣的插件:

HEXO官方插件页面

阿里云OSS插件

不知道什么时候开始,OSS支持静态站点的托管,采用这个插件,可以将所有的静态页面托管在OSS里。戳我抵达