Hexo 更新 NPM 模块

系统环境

1
2
3
NPM:6.4.1
NodeJs: v10.15.0
Linux: Debian 9(stretch)

NPM 更新模块(第一种方法)

假设需要将模块 hexo-site-auth@0.0.3 更新至 hexo-site-auth@0.0.4,可参考以下操作步骤。由于国内下载 NPM 模块的网速很慢,建议使用代理进行下载。注意这里不能使用 CNPM + 淘宝镜像来安装 NPM 模块,具体原因下面会给出解释。

1
2
3
4
5
6
7
# 进入Hexo的根目录
$ cd hexo_blog

# 更新NPM模块(与模块的安装操作没有本质区别,只是指定了新的版本号),如果执行失败可尝试删除package-lock.json文件后再更新
$ npm install hexo-site-auth@0.0.4 --save

# 提示:当安装命令不带具体版本号时,则表示默认安装最新版本的NPM模块

NPM 更新模块(第二种方法)

1
2
3
4
5
6
7
8
9
10
11
12
# 进入Hexo的根目录
$ cd hexo_blog

# 编辑package.json配置文件,更改对应模块的版本号为目标版本号
$ vim package.json
"hexo-site-auth": "0.0.4"

# 安装NPM模块
$ npm install

# 若安装失败,可以尝试删除NPM的整个模块目录后再安装
$ rm -rf node_modules

检查更新模块是否成功

1
2
3
4
5
6
7
8
9
10
# 通过Hexo清理Public目录
$ hexo clean

# 通过Hexo构建静态文件
$ hexo generate

# 通过Hexo启动服务
$ hexo server

# 若Hexo的Web服务可以正常启动,则说明NPM模块更新成功

Gulp 压缩图片失败

若上面使用淘宝的 CNPM + 淘宝镜像来安装 NPM 模块,整个安装过程很顺利,但 Gulp 执行图片压缩的时候,可能会出现以下错误。初步判断是 CNPM 安装 gulp-imagemin 模块时出了问题,此时需要先卸载 gulp-imagemin,然后使用 NPM 工具重新安装 gulp-imagemin。

1
2
3
4
5
remote: (node:2037) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 282)
remote: (node:2037) UnhandledPromiseRejectionWarning: Error: spawn /home/git/blog-githooks-build-repo/node_modules/_optipng-bin@5.1.0@optipng-bin/vendor/optipng EACCES
remote: at Process.ChildProcess._handle.onexit (internal/child_process.js:232:19)
remote: at onErrorNT (internal/child_process.js:407:16)
remote: at process._tickCallback (internal/process/next_tick.js:63:19)
1
2
3
4
5
6
7
8
9
10
# 进入Hexo的根目录
$ cd hexo_blog

# 卸载gulp-imagemin
$ npm uninstall gulp-imagemin@5.0.3 --save

# 安装gulp-imagemin
$ npm install gulp-imagemin@5.0.3 --save

# 强烈建议直接删除整个node_modules目录,然后使用NPM工具重新安装所有模块

注意事项

  • package-lock.json 文件不是必要的,如果希望更新该文件,可直接删除文件,然后执行 “npm install” 操作后会自动重新生成该文件
  • 执行 “npm install” 操作后,可以接着执行 “npm audit fix”,但绝对不能再执行 “npm audit fix –force”,否则会强制升级 NPM 模块的版本,导致后续因代码不兼容,出现各种编译错误