Ubuntu Hexo环境还原问题

系统重装、博客项目恢复中,发现重新安装hexo环境出现问题:主要矛盾点在于npm、node版本升级,与之前版本相差甚远。拉取原有项目安装依赖过程中失败、并且掺杂安装权限问题,导致错误频出。我记录遇到的主要问题及对应解决方案。

npm安装权限问题

遇到npm安全权限问题时,查询资料主要有两个解决方式:

第一种提权安装(不建议使用,会导致安装的应用权限错乱)。

我们正常安装时,使用命名:

npm install hexo-cli -g

此时很可能报错:

gure@gure-tm1701:~/devproject/blog/Test/blog$ npm install hexo-cli -g
npm ERR! code EACCES
npm ERR! syscall mkdir
npm ERR! path /usr/local/lib/node_modules
npm ERR! errno -13
npm ERR! Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules'
npm ERR!  [Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules'] {
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'mkdir',
npm ERR!   path: '/usr/local/lib/node_modules'
npm ERR! }
npm ERR! 
npm ERR! The operation was rejected by your operating system.
npm ERR! It is likely you do not have the permissions to access this file as the current user
npm ERR! 
npm ERR! If you believe this might be a permissions issue, please double-check the
npm ERR! permissions of the file and its containing directories, or try running
npm ERR! the command again as root/Administrator.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/gure/.npm/_logs/2024-07-09T02_58_02_788Z-debug-0.log

发现无/usr/local/lib/node_modules操作权限。

我们可以使用sudo提权安装:

sudo npm install hexo-cli -g

此时发现安装正常。

但是该种方式会导致hexo权限异常。立马可能遇到的问题就是,执行hexo init等命令时,需要使用管理员权限,也就是需要添加sudo才能执行,否则会找不到命令。但如果使用sudo权限,会导致后续命令找不到环境变量,一步步提权,导致权限滥用。

第二种方式,修改文件归属。

通过报错信息看到,是npm在/usr/local/lib文件夹创建node_modules失败。查看权限发现/usr/local/lib归属root用户,但是我们日常软件都安装在该路径下,我们应该将该文件夹的权限授权给当前用户:

sudo chown -R $USER /usr/local

修改后再次执行,发现安装成功:

gure@gure-tm1701:~/devproject/blog/Test/blog$ npm install hexo-cli -g

added 53 packages in 2s

14 packages are looking for funding
  run `npm fund` for details

通过覆盖方式,未对应用提权,就实现了应用安装。

hexo依赖安装问题

hexo-cli安装完成后,进入原博客项目路径,执行npm install。会发现输出很多执行警告,原来是很多包过时了,但没有报错误ERROR。然而当我们执行hexo g时,错误就出现了:

INFO  Start processing
node:events:495
      throw er; // Unhandled 'error' event
      ^

Error: EACCES: permission denied, open '/home/gure/devproject/blog/HexoTheme/source/_posts/写在父亲节之后/rizhao_0616.jpg'
Emitted 'error' event on ReadStream instance at:
    at emitErrorNT (node:internal/streams/destroy:151:8)
    at emitErrorCloseNT (node:internal/streams/destroy:116:3)
    at process.processTicksAndRejections (node:internal/process/task_queues:82:21) {
  errno: -13,
  code: 'EACCES',
  syscall: 'open',
  path: '/home/gure/devproject/blog/HexoTheme/source/_posts/写在父亲节之后/rizhao_0616.jpg'
}

Node.js v18.19.1

此时有两种方法进行修改,第一种是新版本兼容;第二种是版本降级。

新版本兼容

新版本兼容能使用一些新的特性及更好的稳定性,对于博客网站来说,样式是不变的。因此兼容新版本的诉求倒不是特别强烈。
我们在一个新路径使用hexo init初始化一个新的hexo项目,编译hexo g、调试hexo s成功。进入新路径,查看package.json文件:

{
  "name": "hexo-site",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "build": "hexo generate",
    "clean": "hexo clean",
    "deploy": "hexo deploy",
    "server": "hexo server"
  },
  "hexo": {
    "version": "7.3.0"
  },
  "dependencies": {
    "hexo": "^7.0.0",
    "hexo-generator-archive": "^2.0.0",
    "hexo-generator-category": "^2.0.0",
    "hexo-generator-index": "^3.0.0",
    "hexo-generator-tag": "^2.0.0",
    "hexo-renderer-ejs": "^2.0.0",
    "hexo-renderer-marked": "^6.0.0",
    "hexo-renderer-stylus": "^3.0.0",
    "hexo-server": "^3.0.0",
    "hexo-theme-landscape": "^1.0.0"
  }
}

将更新的内容替换到原hexo项目中,重新安装依赖:npm install,如果报错则清空缓存:npm cache clear --force,命令会弹出警告,忽略即可,然后重新执行安装操作即可安装完成。

然后执行hexo g,此时根据权限情况,可能会执行失败:

FATAL Something's wrong. Maybe you can find the solution here: https://hexo.io/docs/troubleshooting.html
Error: EACCES: permission denied, open '/home/gure/devproject/blog/HexoTheme/source/_posts/***'

我们赋予对应的权限即可:

sudo chown -R $USER /home/gure/devproject/blog/HexoTheme/

最周执行hexo shexo d操作,就可以在本地进行预览显示。
预览时,发现文章中,代码样式宽度越界。
经定位,是新版本依赖中兼容问题,这个暂不修复,我使用了另外一种方式:降低版本。

降低版本

找回之前依赖的版本,直接替换:

{
  "name": "hexo-site",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "build": "hexo generate",
    "clean": "hexo clean",
    "deploy": "hexo deploy",
    "server": "hexo server"
  },
  "hexo": {
    "version": "5.4.2"
  },
  "dependencies": {
    "hexo": "^5.0.0",
    "eslint": "^6.0.1",
    "hexo-baidu-url-submit": "0.0.6",
    "hexo-cli": "^4.3.2",
    "hexo-deployer-git": "^3.0.0",
    "hexo-generator-archive": "^1.0.0",
    "hexo-generator-baidu-sitemap": "^0.1.9",
    "hexo-generator-category": "^1.0.0",
    "hexo-generator-feed": "^1.2.2",
    "hexo-generator-index": "^2.0.0",
    "hexo-generator-search": "^2.4.0",
    "hexo-generator-sitemap": "^1.2.0",
    "hexo-generator-tag": "^0.2.0",
    "hexo-helper-live2d": "^3.1.1",
    "hexo-permalink-pinyin": "^1.1.0",
    "hexo-prism-plugin": "^2.3.0",
    "hexo-renderer-ejs": "^1.0.0",
    "hexo-renderer-marked": "^4.0.0",
    "hexo-renderer-stylus": "^2.0.0",
    "hexo-server": "^2.0.0",
    "hexo-wordcount": "^6.0.1"
  }
}

版本还原后,清空npm缓存:npm cache clear --force,重新执行安装操作npm install,文章编译运行后后发现显示正常了。

以上路径、用户名均使用我电脑的路径及用户名,实际操作中需要替换成对应的路径和与电脑中真实用户。


   转载规则


《Ubuntu Hexo环境还原问题》 gure 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
雨后蛙鸣哪里来 雨后蛙鸣哪里来
下雨后,忽然冒出来无数的青蛙鸣叫,被吵得晚上睡不着觉。很奇怪,青蛙产卵、蝌蚪成长应该是很长一个过程,是怎么突然冒出来那么多的青蛙呢? 猜想:雨后新生的青蛙宝宝?在百科上看到:在雌体产卵时将精液排到卵上。数天到一周以上蝌蚪孵出,2个月至3年内
2024-07-10
下一篇 
Ubuntu启动引导项调整 Ubuntu启动引导项调整
Ubuntu开机启动引导界面除了Ubuntu、Windows系统之外,还有Advanced options for Kubuntu、UEFI Firmware Settings等基本不用的条目。今天记录一下如何移除这些条目及相关问题。 启动
2024-07-08
  目录