系统重装、博客项目恢复中,发现重新安装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 s
、hexo 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
,文章编译运行后后发现显示正常了。
以上路径、用户名均使用我电脑的路径及用户名,实际操作中需要替换成对应的路径和与电脑中真实用户。