最近换了新电脑,因为之前把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写博客了!?