avatar

给博客添加豆瓣插件

豆瓣读书、电影和游戏插件

本博客使用的是Hexo-douban这块插件,由于插件主人工作繁忙,无心继续更新维护,也暴露出在使用过程中的问题,比如安装成功却无法爬取豆瓣数据等情况,下面将记录一下安装步骤和踩坑解决方案。

安装命令

1
$ cnpm install hexo-douban --save

升级

1
npm install hexo-douban --update --save

配置

将下面的配置写入站点的全局配置文件 _config.yml 里(不是主题的配置文件).

1
2
3
4
5
6
7
8
9
10
11
12
13
douban:   
user: xxxxxx
builtin: true
book:
title: '我的书单' # 该页面的标题
quote: '每读一本书,思维总会发光' # 写在页面开头的一段话,支持html语法.
movie:
title: '我的影单'
quote: '一场电影一场空'
game:
title: '我的游戏'
quote: '一场游戏一场梦'
timeout: 10000 # 爬取数据的超时时间,默认是 10000ms ,如果在使用时发现报了超时的错(ETIMEOUT)可以把这个数据设置的大一点。
  • user: 你的豆瓣ID.打开豆瓣,登入账户,然后在右上角点击 “个人主页” ,这时候地址栏的URL大概是这样:”https://www.douban.com/people/xxxxxx/" ,其中的”xxxxxx”就是你的个人ID了。
  • builtin: 是否将生成页面的功能嵌入hexo s和hexo g中,默认是false,另一可选项为true(1.x.x版本新增配置项,建议开启)。
  • title: 该页面的标题.
  • quote: 写在页面开头的一段话,支持html语法.
  • timeout: 爬取数据的超时时间,默认是 10000ms ,如果在使用时发现报了超时的错(ETIMEOUT)可以把这个数据设置的大一点。

如果只想显示某一个页面(比如movie),那就把其他的配置项注释掉即可。另外需注意douban:前面必须要顶格才行,有时候复制粘贴会多出空格,导致没有产生相关的页面。

启用使用

在0.x.x版本中,文章的更新和豆瓣页面的爬取操作是绑定在一起的,无法支持单独更新文章或者单独爬取文章。

在1.x.x版本中,使用hexo douban命令即可生成指定页面,如果不加参数,那么默认参数为-bgm。

1.x.x版本

需要注意的是,通常大家都喜欢用hexo d来作为hexo deploy命令的简化,但是当安装了hexo douban之后,就不能用hexo d了,因为hexo douban跟hexo deploy的前缀都是hexo d。

1
2
3
4
5
6
7
8
9
10
$ hexo douban -h
Usage: hexo douban

Description:
Generate pages from douban

Options:
-b, --books Generate douban books only
-g, --games Generate douban games only
-m, --movies Generate douban movies only

当配置了builtin参数为true,那么除了可以使用hexo douban命令生成之外,hexo g或hexo s也内嵌了生成页面的功能。builtin设置为true时,可直接使用命令 hexo g即在生成静态页面前爬取豆瓣数据,不需要先执行 hexo douban。

0.x.x版本
直接使用命令hexo g即在生成静态页面前爬取豆瓣数据,如果使用hexo s则会监听文件变动,每有一次变动就会重新爬取数据。

生成页面命令

在GitBash下输入命令:

1
2
3
4
5
6
7
hexo clean  #清除之前生成的文件
hexo douban -bmg #生成豆瓣书籍、电影、游戏页面
hexo g #生成文章
hexo s #启动本地服务器
hexo deploy #上传部署

#-bgm代表的是book、game、movie三个参数,如果只需要其中的一部分就只带你想要的那些参数。

注:由于 hexo douban的简写也是hexo d,与hexo deploy的简写指令hexo d冲突,因此在进行二者部署的时候,只能都打全名而不能打简写形式

显示测试

如果上面的配置和操作都没问题,我们只需要在站点目录下测试http://localhost:4000/books 或者 http://localhost:4000/movies等,如果看到页面了就说明成功了。

菜单配置

如果上述都没有问题,我们就可以在菜单栏中添加按钮了,打开主题配置文件 _config.xml,找到菜单按钮,可以选择性的添加下面内容:

1
2
3
4
5
6
7
8
menu:
首页: / || fa fa-home
随机文章: /random/ || fa fa-random
时间轴: /archives/ || fa fa-archive
清单||fa fa-list:
- 书籍 || /books/ || fa fa-book # 这是链接到books页面
- 电影 || /movies/ || fa fa-film # 这是链接到movies页面
- 游戏 || /games/ || fa fa-gamepad # 这是链接到games页面

遇到问题及解决方案

问题:userid设置完成,但是hexo g 爬取不到豆瓣数据,代码如下:

1
2
0 books have been loaded in 3066 ms, because you are offline or your network is bad
0 movies have been loaded in 3041 ms, because you are offline or your network is bad

解决方案:

由于使用的node.js是15版本的,而Hexo-douban插件不支持,可能是兼容性问题,可尝试使用别的nodejs版本,建议安装 v12.18.0版本可解决。

Win10使用nvm进行node版本管理

因为兼容性原因,需要降低node版本。可以选择直接卸载现有版本,重新安装其他版本,但是考虑可拓展性,还是准备装一下nvm。

nvm简介

nvm是Linux下常用的一个node.js多版本管理工具,但是nvm不能在Windows下使用,在GitHub上有个项目叫 nvm-windows,可以让我们在Windows下对node.js进行多版本管理。

下载nvm安装包

下载GitHub提供的nvm-windows

下载可执行安装包:nvm-setup.zip,解压,直接安装即可。

在安装nvm-windows前,由于已经安装过node,需要先卸载,并且要把目录清理干净。

完全卸载已安装的node.js

  1. 从卸载程序卸载程序node.js,也可以直接右键node.js的安装包并选择卸载。
  2. 从下列的目录中找到相关的内容并删除掉:
    1. C:\Program Files (x86)\nodejs
    2. C:\Program Files\nodejs
    3. C:\Users\{User}\AppData\Roaming\npm(或 %appdata%\npm
    4. C:\Users\{User}\AppData\Roaming\npm-cache(或 %appdata%\npm-cache
  3. 检查电脑环境变量,将配置过的node.js和npm路径删除掉。
  4. 重启电脑。

安装nvm

将下载的文件解压后得到nvm-setup.exe,安装直接点下一步即可,有两个界面需要注意:

  1. Select Destination Location/设置nvm路径
    安装完成后有个setting.txt文件,此路径相当于该文件中的root。
    注意:路径不支持空格,不能设为类似”C:Program Files”这种,否则node无法使用,建议设置为:D:softwarenvm
  2. Set Node.js Symlink/设置node.js映射路径
    此路径相当于setting.txt文件中的path,该路径会与使用的node版本一一对应 ,根据nvm使用的版本,对应不同的node目录,从而实现node版本切换。
    注意
    此路径同样不支持空格,不能设为类似”C:Program Files”这种,否则当你nvm use node版本时会出现如下:
1
2
$ nvm use 12.18.0
exit status 1: 'C:\Program' 一串乱码。。。

也不能将目录设置成nvm安装路径的上一级,比如: D:software,否则明明提示成功用nvm安装了node,但是当你查看node版本时会出现:’node’ 不是内部或外部命令,也不是可运行的程序,建议设置为:D:softwarenodejs
NVM_HOME D:softwarenvm
NVM_SYMLINK D:softwarenodejs

查看nvm版本,出现如下,表示nvm安装成功

1
2
$ nvm -v
Running version 1.1.7.

使用nvm安装node

设置node与npm下载源

nvm node_mirror https://npm.taobao.org/mirrors/node/
nvm npm_mirror https://npm.taobao.org/mirrors/npm/

设置完下载源后,会发现settings.txt 文件里的path不见了,不用管他
此时setting.txt文件如下:
root: D:softwarenvm
arch: 64
proxy: none
originalpath: .
originalversion:
node_mirror: https://npm.taobao.org/mirrors/node/
npm_mirror: https://npm.taobao.org/mirrors/npm/

安装node版本

以我安装node 12.18.0版本为例:
1.安装指定node版本

1
$ nvm install 12.18.0 64-bit

2.查看已安装的node版本

1
2
$ nvm list
* 12.18.0 (Currently using 64-bit executable)

3.使用某个node版本

1
2
$ nvm use 12.18.0
Now using node v10.15.3 (64-bit)

如上3步后,键入node和npm命令,就可以查看到当前的node和npm版本了。

4.查看node版本

1
2
$ node -v
v12.18.0

5.查看npm版本

1
2
$ npm -v
6.14.4

nvm常用命令

1
2
3
4
5
nvm list available              //查看可安装的nodejs版本
nvm install <version>      // 安装node版本
nvm list              // 查看已安装的node版本
nvm use [version] [arch]    // 使用某个node版本
nvm uninstall <version>     // 卸载node版本

Win11使用NVM版本管理工具

注意: 在安装nvm之前,必须确保nodejs和npm均已卸载干净!

打开控制面板选择程序卸载,该操作是卸载nodejs在系统的注册表等信息,卸载完成后,手动删除nodejs相关的目录文件,手动删除之前在系统环境变量和用户环境变量配置的路径,然后重启电脑。

您可以使用以下方法来查看 Node.js 是否已经卸载干净:

  • 在命令提示符或 PowerShell 中,输入以下命令:
1
where node

如果输出为空,则 Node.js 已经卸载干净。

下载nvm安装包

下载GitHub提供的nvm-windows ,选择nvm-setup.exe下载,双击打开进行直接安装。

自定义nvm安装位置和自定义nodejs安装位置时一定要改成 非C盘且无空格的目录文件夹,比如我安装位置D:\software\nvm和D:\software\nodejs;否则默认安装在 Program Files这种带有空格的文件夹,可能会导致路径识别失败。

安装好之后使用nvm -v命令查看当前安装版本:

1
2
PS C:\Users\潘永康> nvm -v
1.1.12

列出当前安装的Node版本

1
nvm ls

列出所有可用的Node.js版本

1
nvm list available

安装特定版本

1
nvm install 12.18.0

切换使用版本

1
nvm use 12.18.0

配置全局淘宝镜像

找到D:\software\nvm目录下的setting.txt文件,添加如下两行代码:

1
2
node_mirror: https://npm.taobao.org/mirrors/node/
npm_mirror: https://npm.taobao.org/mirrors/npm/

setting.txt 文件设置 node_mirrornpm_mirror 变量,会设置默认的 Node.js 和 npm 镜像源。

node_mirror 变量设置 Node.js 包的镜像源,npm_mirror 变量设置 npm 包的镜像源。

执行命令 npm config set registry https://registry.npm.taobao.org,会设置全局的 npm 包镜像源。

两者的区别在于:

  • setting.txt 文件中的设置是全局的,适用于所有 Node.js 和 npm 命令。
  • 命令 npm config set registry https://registry.npm.taobao.org 的设置仅适用于当前会话。

因此,如果您希望所有 Node.js 和 npm 命令都使用淘宝镜像源,则建议在 setting.txt 文件中设置 node_mirrornpm_mirror 变量。

如果您只希望当前会话使用淘宝镜像源,则可以执行命令:

1
npm config set registry https://registry.npm.taobao.org

查看当前的 npm 包镜像源:

1
npm config get registry

node环境变量配置修改

查看全局安装的模块的根目录:

1
2
npm root -g
D:\Program Files\nodejs\node_global\node_modules

如发现还是默认在Program Files带有空格的文件夹,则需要在node.js的安装目录下新建两个文件夹node_global和node_cache。创建完 node_globalnode_cache 文件夹后,需要使用 npm config set 命令来更改路径。

更改全局模块路径命令:

1
npm config set prefix D:\software\nodejs\node_global

更改缓存路径命令:

1
npm config set cache D:\software\nodejs\node_cache

更改路径后,需要重新启动计算机才能使更改生效。

可以使用 npm config list 命令来查看当前的配置是否已修改。

清除 npm 缓存: 清除 npm 缓存并重新安装 cnpm:

1
2
npm cache clean --force
npm install -g cnpm

问题一:

1
2
3
4
5
6
PS C:\Users\潘永康> npm install -g cnpm
npm WARN notsup Unsupported engine for cnpm@9.4.0: wanted: {"node":">= 14.18.0"} (current: {"node":"12.18.0","npm":"6.14.4"})
npm WARN notsup Not compatible with your version of node/npm: cnpm@9.4.0

npm ERR! code EPERM
npm ERR! syscall rename

这个错误表示当前的 Node.js 版本(12.18.0)和 npm 版本(6.14.4)不支持 cnpm 9.4.0 的安装要求。cnpm 9.4.0 需要 Node.js 版本 14.18.0 或更高版本。

解决办法,安装其他7以上的cnpm版本,支持 Node.js 12.x 版本。

1
npm install -g cnpm@7

安装之后,使用命令进行查看:

1
2
3
4
5
6
7
8
9
10
11
12
PS E:\MyBlog\blog\Hexo> node -v
v12.18.0
PS E:\MyBlog\blog\Hexo> npm -v
6.14.4
PS E:\MyBlog\blog\Hexo> cnpm -v
cnpm@7.1.1 (D:\software\nvm\v12.18.0\node_global\node_modules\cnpm\lib\parse_argv.js)
npm@6.14.18 (D:\software\nvm\v12.18.0\node_global\node_modules\cnpm\node_modules\npm\lib\npm.js)
node@12.18.0 (D:\software\nodejs\node.exe)
npminstall@5.8.1 (D:\software\nvm\v12.18.0\node_global\node_modules\cnpm\node_modules\npminstall\lib\index.js)
prefix=D:\software\nodejs\node_global
win32 x64 10.0.22621
registry=https://registry.npmmirror.com

执行删除node_modules文件夹命令报错:

1
2
3
4
PS E:\MyBlog\blog\Hexo> rm -rf node_modules
Remove-Item : 找不到与参数名称“rf”匹配的参数。
所在位置 行:1 字符: 4
+ rm -rf node_modules

可使用如下命令进行删除:

1
Remove-Item node_modules -Force

这将强制删除 node_modules 目录,即使目录不为空。

安装指定版本的Hexo:

1
npm install -g hexo@4.2.0

问题:淘宝镜像安装时报错已过期。

1
npm ERR! request to https://registry.npm.taobao.org/hexo failed, reason: certificate has expired

可以使用其他国内镜像,例如:

1
2
npm config set registry https://registry.npmmirror.com/
cnpm config set registry https://registry.npmmirror.com/

问题:执行hexo s 访问http://localhost:4000 浏览器报错:

1
Cannot GET /

原因和解决办法:需要重新npm i下载安装依赖,否则执行hexo g 命令时,md文章配置有误也不报错,相关的index.html、js和xml文件也无法生成。

文章作者: PanXiaoKang
文章链接: http://example.com/2021/02/03/%E7%BB%99%E5%8D%9A%E5%AE%A2%E6%B7%BB%E5%8A%A0%E8%B1%86%E7%93%A3%E6%8F%92%E4%BB%B6/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 向阳榆木
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论