今天把博客迁移到了新域名,顺便把 node.jsHexo 和主题都升了下级。

当习惯的运行 hexo s 命令时,发现多了些 warnings,如下:

<br>1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br><br> <br>$ hexo -s <br>(node:87224) Warning: Accessing non-existent property 'lineno' of module exports inside circular dependency<br>(Use `node --trace-warnings ...` to show where the warning was created)<br>(node:87224) Warning: Accessing non-existent property 'column' of module exports inside circular dependency<br>(node:87224) Warning: Accessing non-existent property 'filename' of module exports inside circular dependency<br>(node:87224) Warning: Accessing non-existent property 'lineno' of module exports inside circular dependency<br>(node:87224) Warning: Accessing non-existent property 'column' of module exports inside circular dependency<br>(node:87224) Warning: Accessing non-existent property 'filename' of module exports inside circular dependency<br><br>

说实话我对 node.js 没啥了解,但是单词还是认识几个,看起来像是循环依赖的问题。(习惯性想起了一道面试题:Spring 是如何解决循环依赖的?)

这些 warnings 其实对 Hexo 程序运行没啥影响,只是看起来不舒服罢了。

但出于好奇和洁癖,就去 google 了一下。这里来总结一下原因及解决方案。

原因其实就是 #29935 这个 pr 被合到 node.js 14.0.0 里边了,所以从 node.js 14 开始,这个问题就在网上不断被讨论了。

大家的解决办法也是五花八门,其中一个比较有代表性的是把 node 降级,降到 12 就不会报这个 warning 了

<br>1<br>2<br>3<br><br> <br>brew uninstall node<br>brew install node@12<br>brew link --overwrite --force node@12<br><br>

但这样解决问题显然不是我的风格,继续翻 Github 上的 issues,发现具体到 Hexo 这里的 warning是由于 stylus 导致的,幸运的是 3 天前 stylus 在 0.54.8 版本修复了这个问题(见 pr #2538 )。

所以对于 Hexo 用户来说,重新装一下 hexo-renderer-stylus 就可以愉快的 hexo s

<br>1<br>2<br><br> <br>yarn remove hexo-renderer-stylus<br>yarn add hexo-renderer-stylus<br><br>

至于其他的 package 导致的 warnings,可以使用如下方式来看看具体是哪个 package 导致的

<br>1<br><br> <br>npx cross-env NODE_OPTIONS="--trace-warnings" hexo s<br><br>

UPDATE,接昨天说的:

刚写完准备睡觉,发现 hexo s 不报 warning 了,但是启动后又报了 😶

使用上边刚说的那个命令,发现这其实是 nib@1.1.2 这个包里的 stylus 引起的问题,nib 里的 dependencies 如下:

<br>1<br>2<br>3<br><br> <br>{<br> "stylus": "0.54.5"<br>}<br><br>

已经有人给 nib 提 issue 了,但看它最后一次更新已经是 4 years ago 了,估计是指望不上它更新了,那我们自己来解决吧!

在 package.json 里增加 resolutions 来覆盖版本定义

<br>1<br>2<br>3<br><br> <br>"resolutions": {<br> "stylus": "^0.54.8"<br>}<br><br>

然后重新 yarn install 一下就好了。

至此 hexo 就可以和 node.js 14 开始愉快的旅程了~

参考: