迁移 Hexo 博客遇到的坑

最近换了2020款的mac pro,因为之前把Ubuntu电脑上的Hexo博客同步到了Github私有库,想着在新电脑上只要git clone一下就万事大吉了,结果,坑是一个接一个,记录一下,防止下次换电脑的时候又碰到这种情况。

关于如何同步博客到github,可以参考这篇文章。如何同步Hexo博客

当我git克隆下来博客,进入博客运行hexo server 的时候,报了如下的错误:

{ Error: Cannot find module './build/default/DTraceProviderBindings'
    at Function.Module._resolveFilename (module.js:469:15)
    at Function.Module._load (module.js:417:25)
    at Module.require (module.js:497:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/Users/alansouza/repo/node_modules/dtrace-provider/dtrace-provider.js:17:23)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3) code: 'MODULE_NOT_FOUND' }

如果碰到这个错误只需要执行以下的命令就可以了:

rm -rf node_modules/ && npm install

如果报Local hexo not found in的错误,用上述方法也能解决

好了,第一个问题解决了,然后执行hexo s又报了一个错,错误代码如下:

(node:9876) Warning: Accessing non-existent property 'lineno' of module exports inside circular dependency
(Use `node --trace-warnings ...` to show where the warning was created)
(node:9876) Warning: Accessing non-existent property 'column' of module exports inside circular dependency
(node:9876) Warning: Accessing non-existent property 'filename' of module exports inside circular dependency
(node:9876) Warning: Accessing non-existent property 'lineno' of module exports inside circular dependency
(node:9876) Warning: Accessing non-existent property 'column' of module exports inside circular dependency
(node:9876) Warning: Accessing non-existent property 'filename' of module exports inside circular dependency

谷歌了一下,是因为node的版本过高的原因,好吧,那就降低版本。

node 中有个专门的升级降级模块nvm

好的,那就安装

brew install nvm

安装完成,安装过程也没报错,于是开开心心地运行以下命令(因为Ubuntu上用的版本是12.14):

nvm install 12.14

结果提示:

zsh: command not find!

怎么回事?明明安装好了啊,又搜索一圈发现,原来是brew的问题,这里直接给出最后的解决方法,中间走的弯路就略去了。

首先,卸载掉nvm

brew uninstall nvm

然后,运行以下命令(相当于ubuntu的apt autoremove)

brew cleanup

最后直接通过zsh安装,命令如下:

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | zsh

安装完成!

运行以下,如果发现还是提示命令不错在,可以在.zshrc文件最后加入以下两行

export NVM_DIR=~/.nvm
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm

我在这之中还碰到了一个问题,可能是因为最开始用brew安装过nvm的原因,用zsh安装nvm的时候,提示了以下错误:

You have $NVM_DIR set to "~/.nvm", but that directory does not exist. Check your profile files and environment.

解决方法是在命令行运行

unset $NVM_DIR

释放这个环境变量

现在再运行

nvm install 12.14

就不会再报错了。

通过以上步骤,我的博客就能正常使用Hexo三连了。

但是当我新建文章的时候,又报了一个新错:

events.js:200
      throw er; // Unhandled 'error' event
      ^

Error: spawn typora ENOENT
    at Process.ChildProcess._handle.onexit (internal/child_process.js:264:19)
    at onErrorNT (internal/child_process.js:456:16)
    at processTicksAndRejections (internal/process/task_queues.js:81:21)
Emitted 'error' event on ChildProcess instance at:
    at Process.ChildProcess._handle.onexit (internal/child_process.js:270:12)
    at onErrorNT (internal/child_process.js:456:16)
    at processTicksAndRejections (internal/process/task_queues.js:81:21) {
  errno: 'ENOENT',
  code: 'ENOENT',
  syscall: 'spawn typora',
  path: 'typora',
  spawnargs: [

看了一下,应该是之前在Ubuntu系统中设置了新建文章自动用typora打开(如何设置可以参考我之前的文章),在Mac OS中,报错了,这个倒不是什么大问题,百度了一下,直接贴出修改后的代码:

var exec = require('child_process').exec; 
// Hexo 2.x 用户复制这段 
//hexo.on('new', function(path){ exec('open -a "markdown编辑器绝对路径.app" ' + path); }); 
// Hexo 3 用户复制这段 
hexo.on('new', function(data){ exec('open -a "Typora.app" ' + data.path); });

还有一个就是在mac中grep在当前目录搜索时,需要加.号,我记得在Ubuntu中不用。

好了,又可以痛痛快快地用Typora写博客了!😀

留下评论