<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hexo on 冯威的博客</title><link>https://fwhyy.com/tags/hexo/</link><description>Recent content in Hexo on 冯威的博客</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Thu, 13 Feb 2025 08:37:00 +0800</lastBuildDate><atom:link href="https://fwhyy.com/tags/hexo/atom.xml" rel="self" type="application/rss+xml"/><item><title>插件开发：实现 Obsidian 同步到 hexo</title><link>https://fwhyy.com/2025/02/plugin-development-implement-obsidian-synchronization-to-hexo/</link><pubDate>Thu, 13 Feb 2025 08:37:00 +0800</pubDate><guid>https://fwhyy.com/2025/02/plugin-development-implement-obsidian-synchronization-to-hexo/</guid><description>&lt;p&gt;近两年一直使用 Obsidian 进行最终文字的输出，除了发公众号，还会同步发布到博客中，博客使用的 hexo，现在发布博客的步骤是：&lt;/p&gt;
&lt;!-- more --&gt;
&lt;p&gt;1、将文章标题在翻译软件中翻译为英文，并以横线隔开每个单词，作为 hexo 的文件名。&lt;/p&gt;
&lt;p&gt;2、vs code 打开 hexo 的代码，执行 &lt;code&gt;hexo n '英文的文件名'&lt;/code&gt; 。&lt;/p&gt;
&lt;p&gt;3、将 Obsidian 中的文章内容复制到新创建的 md 文件中。&lt;/p&gt;
&lt;p&gt;4、修改内容最上方的 Front Matter 信息，例如：categories、tags、date 等。&lt;/p&gt;
&lt;p&gt;5、执行下面命令完成构建和发布：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;hexo g
hexo d
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这个步骤还是有点繁琐，所以经常会忘记更新，忘记不是因为我懒，而是方式不是最优，最终影响到了执行。平时工作也是同样的道理，一件事情如果很繁琐，不顺利，就得停下来看看方法是不是用错了。&lt;/p&gt;
&lt;p&gt;最近在尝试使用各类 AI 工具，就想着这个问题是可以写个 Obsidian 的插件来减少工作量的，于是花了一个晚上搞定了。&lt;/p&gt;
&lt;p&gt;1、使用的工具是 Windsurf，模型还是用的 Cloude 3.5 sonnet ，之所以没用 DeepSeek，是因为通过这几天的试用，感觉 Windsurf 对 Cloude 3.5 sonnet 的调教更优一些（个人感觉）。&lt;/p&gt;
&lt;p&gt;2、遵循一次性对话尽可能只让 AI 完成一件事的原则，我先让生成一个 Obsidian 插件的基础文件，核心逻辑在 main.ts 文件中：&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2025/202502121650565.webp" alt="" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;3、接着就按照我上面提到的步骤一步一步引导 Windsurf 来完成开发。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;获取文章标题调用翻译 API 转换为英文，并添加横线隔开，翻译 API 一开始使用的腾讯，几轮下来还是存在问题，换成百度的翻译 API 就运行成功了&lt;/li&gt;
&lt;li&gt;将文章内容复制到 hexo 的 &lt;code&gt;_posts&lt;/code&gt; 目录，获取 Obsidian 文章中的 tag 和 categories，自动转换为 hexo 需要的 Front Matter 格式&lt;/li&gt;
&lt;li&gt;过程中如果遇到错误，可以打开 Obsidian-&amp;gt;View-&amp;gt;Toggle Developer Tools （和网页的 F12 一样），将错误信息提供，几轮下来基本都能解决&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;4、代码写完，执行 &lt;code&gt;npm run build&lt;/code&gt; 进行构建，构建完成后，会生成一个新的 main.js 文件，Obsidian 插件需要的是包含 main.js 在内的三个文件，如下图：&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2025/202502121651563.webp" alt="" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;5、怎么安装到 Obsidian，具体步骤也可以在 Windsurf 中询问：&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2025/202502121651705.webp" alt="" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;需要注意的是重新覆盖了 main.js 文件后，需要重新加载插件（禁用后重新启用）才能生效。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;6、首次安装后，在 Obsidian 的第三方插件中就可以看到自己开发的插件了：&lt;/p&gt;</description></item><item><title>程序员不可错过的一款Hexo博客主题</title><link>https://fwhyy.com/2022/02/hexo-stellar/</link><pubDate>Thu, 10 Feb 2022 08:42:53 +0800</pubDate><guid>https://fwhyy.com/2022/02/hexo-stellar/</guid><description>&lt;p&gt;自从 2018 年开始写公众号之后，我的个人站点（fwhyy.com）就停止更新了，直到最近查资料发现了hexo 博客的 stellar 主题，春节期间将博客重新维护起来，主要原因是因为该主题支持专栏的功能。&lt;/p&gt;</description></item><item><title>Hexo 的 Stellar 主题问题</title><link>https://fwhyy.com/2022/01/hexo-stellar-theme-problems/</link><pubDate>Thu, 27 Jan 2022 14:45:54 +0800</pubDate><guid>https://fwhyy.com/2022/01/hexo-stellar-theme-problems/</guid><description>&lt;h2 id="软件版本"&gt;软件版本&lt;/h2&gt;
&lt;p&gt;相关的版本如下：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;macOS: 10.15.7
Hexo: 5.4.0
hexo-cli: 4.3.0
node.js: 14.17.3 
npm: 6.14.13
stellar: 1.6.1
&lt;/code&gt;&lt;/pre&gt;&lt;!-- more --&gt;
&lt;h2 id="问题1-hexo-g-生成问题"&gt;问题1： hexo g 生成问题&lt;/h2&gt;
&lt;p&gt;当我的post数量超过 6 时，使用hexo g 进行生成就会报下图中的错误，删掉一篇就能生成成功，尝试过换不同的post文章，基本能排除是某一个文章特殊内容的问题。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;原文中的错误截图文件已经缺失，这里保留文字说明。
尝试过将 stellar 降级到 1.6.0 和 1.5.2 都出现相同错误。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;后来尝试将_config.xml 中的主题切换成默认主题 languages ，执行 hexo g ，可以正常生成，然后又切回 stellar 主题，hexo g 正常了。后面间歇性的发生上图错误，来回切换下就正常了，很是奇怪。&lt;/p&gt;
&lt;h2 id="问题2运行时问题"&gt;问题2：运行时问题&lt;/h2&gt;
&lt;p&gt;post 文章加到了将近 20 篇时，hexo g 生成没有问题，hexo s 运行后，访问网页，不能正常显示，控制台出现如下错误：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;INFO Start processing
INFO Hexo is running at http://localhost:4000 . Press Ctrl+C to stop.

&amp;lt;--- Last few GCs ---&amp;gt;

[12722:0x110008000] 35949 ms: Scavenge 3974.7 (4103.6) -&amp;gt; 3974.6 (4104.6) MB, 7.9 / 0.0 ms (average mu = 0.813, current mu = 0.672) allocation failure 
[12722:0x110008000] 35974 ms: Scavenge 3975.6 (4104.6) -&amp;gt; 3973.8 (4119.6) MB, 22.8 / 0.0 ms (average mu = 0.813, current mu = 0.672) allocation failure 
[12722:0x110008000] 37751 ms: Mark-sweep 3988.7 (4119.6) -&amp;gt; 3986.5 (4135.6) MB, 1742.6 / 0.0 ms (average mu = 0.656, current mu = 0.133) allocation failure scavenge might not succeed


&amp;lt;--- JS stacktrace ---&amp;gt;

FATAL ERROR: MarkCompactCollector: young object promotion failed Allocation failed - JavaScript heap out of memory
 1: 0x10130c5e5 node::Abort() (.cold.1) [/usr/local/bin/node]
 2: 0x1000b2289 node::Abort() [/usr/local/bin/node]
 3: 0x1000b23ef node::OnFatalError(char const*, char const*) [/usr/local/bin/node]
 4: 0x1001f68c7 v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [/usr/local/bin/node]
 5: 0x1001f6863 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [/usr/local/bin/node]
 6: 0x1003a47e5 v8::internal::Heap::FatalProcessOutOfMemory(char const*) [/usr/local/bin/node]
 7: 0x100400823 v8::internal::EvacuateNewSpaceVisitor::Visit(v8::internal::HeapObject, int) [/usr/local/bin/node]
 8: 0x1003e808b void v8::internal::LiveObjectVisitor::VisitBlackObjectsNoFail&amp;lt;v8::internal::EvacuateNewSpaceVisitor, v8::internal::MajorNonAtomicMarkingState&amp;gt;(v8::internal::MemoryChunk*, v8::internal::MajorNonAtomicMarkingState*, v8::internal::EvacuateNewSpaceVisitor*, v8::internal::LiveObjectVisitor::IterationMode) [/usr/local/bin/node]
 9: 0x1003e7bd5 v8::internal::FullEvacuator::RawEvacuatePage(v8::internal::MemoryChunk*, long*) [/usr/local/bin/node]
10: 0x1003e7916 v8::internal::Evacuator::EvacuatePage(v8::internal::MemoryChunk*) [/usr/local/bin/node]
11: 0x10040524e v8::internal::PageEvacuationTask::RunInParallel(v8::internal::ItemParallelJob::Task::Runner) [/usr/local/bin/node]
12: 0x1003bf202 v8::internal::ItemParallelJob::Task::RunInternal() [/usr/local/bin/node]
13: 0x1003bf688 v8::internal::ItemParallelJob::Run() [/usr/local/bin/node]
14: 0x1003e9985 void v8::internal::MarkCompactCollectorBase::CreateAndExecuteEvacuationTasks&amp;lt;v8::internal::FullEvacuator, v8::internal::MarkCompactCollector&amp;gt;(v8::internal::MarkCompactCollector*, v8::internal::ItemParallelJob*, v8::internal::MigrationObserver*, long) [/usr/local/bin/node]
15: 0x1003e9586 v8::internal::MarkCompactCollector::EvacuatePagesInParallel() [/usr/local/bin/node]
16: 0x1003d4cf7 v8::internal::MarkCompactCollector::Evacuate() [/usr/local/bin/node]
17: 0x1003d258b v8::internal::MarkCompactCollector::CollectGarbage() [/usr/local/bin/node]
18: 0x1003a4eab v8::internal::Heap::MarkCompact() [/usr/local/bin/node]
19: 0x1003a1499 v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [/usr/local/bin/node]
20: 0x10039f2e0 v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [/usr/local/bin/node]
21: 0x1003ad9ea v8::internal::Heap::AllocateRawWithLightRetrySlowPath(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [/usr/local/bin/node]
22: 0x1003ada71 v8::internal::Heap::AllocateRawWithRetryOrFailSlowPath(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [/usr/local/bin/node]
23: 0x100376cce v8::internal::FactoryBase&amp;lt;v8::internal::Factory&amp;gt;::NewRawTwoByteString(int, v8::internal::AllocationType) [/usr/local/bin/node]
24: 0x10078f54d v8::internal::IncrementalStringBuilder::Extend() [/usr/local/bin/node]
25: 0x1004bd9ad v8::internal::JsonStringifier::SerializeString(v8::internal::Handle&amp;lt;v8::internal::String&amp;gt;) [/usr/local/bin/node]
26: 0x1004c2458 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
27: 0x1004c07ee v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;false&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
28: 0x1004be856 v8::internal::JsonStringifier::SerializeArrayLikeSlow(v8::internal::Handle&amp;lt;v8::internal::JSReceiver&amp;gt;, unsigned int, unsigned int) [/usr/local/bin/node]
29: 0x1004c2805 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
30: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
31: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
32: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
33: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
34: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
35: 0x1004c07ee v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;false&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
36: 0x1004be856 v8::internal::JsonStringifier::SerializeArrayLikeSlow(v8::internal::Handle&amp;lt;v8::internal::JSReceiver&amp;gt;, unsigned int, unsigned int) [/usr/local/bin/node]
37: 0x1004c2805 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
38: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
39: 0x1004c07ee v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;false&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
40: 0x1004be856 v8::internal::JsonStringifier::SerializeArrayLikeSlow(v8::internal::Handle&amp;lt;v8::internal::JSReceiver&amp;gt;, unsigned int, unsigned int) [/usr/local/bin/node]
41: 0x1004c2805 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
42: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
43: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
44: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
45: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
46: 0x1004c07ee v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;false&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
47: 0x1004be856 v8::internal::JsonStringifier::SerializeArrayLikeSlow(v8::internal::Handle&amp;lt;v8::internal::JSReceiver&amp;gt;, unsigned int, unsigned int) [/usr/local/bin/node]
48: 0x1004c2805 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
49: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
50: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
51: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
52: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
53: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
54: 0x1004c07ee v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;false&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
55: 0x1004be856 v8::internal::JsonStringifier::SerializeArrayLikeSlow(v8::internal::Handle&amp;lt;v8::internal::JSReceiver&amp;gt;, unsigned int, unsigned int) [/usr/local/bin/node]
56: 0x1004c2805 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
57: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
58: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
59: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
60: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
61: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
62: 0x1004c07ee v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;false&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
63: 0x1004be856 v8::internal::JsonStringifier::SerializeArrayLikeSlow(v8::internal::Handle&amp;lt;v8::internal::JSReceiver&amp;gt;, unsigned int, unsigned int) [/usr/local/bin/node]
64: 0x1004bf687 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;false&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
65: 0x1004ba503 v8::internal::JsonStringify(v8::internal::Isolate*, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
66: 0x1002a0253 v8::internal::Builtin_JsonStringify(int, unsigned long*, v8::internal::Isolate*) [/usr/local/bin/node]
67: 0x100a81b59 Builtins_CEntry_Return1_DontSaveFPRegs_ArgvOnStack_BuiltinExit [/usr/local/bin/node]
68: 0x100a14839 Builtins_ArgumentsAdaptorTrampoline [/usr/local/bin/node]
69: 0x100a1a902 Builtins_InterpreterEntryTrampoline [/usr/local/bin/node]
zsh: abort hexo s
&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>搭建独立博客，这款评论插件不能错过</title><link>https://fwhyy.com/2019/12/build-an-independent-blog-this-comment-plug-in-cant-be-missed/</link><pubDate>Mon, 30 Dec 2019 06:58:14 +0800</pubDate><guid>https://fwhyy.com/2019/12/build-an-independent-blog-this-comment-plug-in-cant-be-missed/</guid><description>&lt;p&gt;微信公众号因为申请的时间晚，一直到现在都无法开通评论功能，之前博客一直使用的多说作为评论系统，自从多说关闭后，好多年都处于无评论状态，最近发现 &lt;code&gt;gitalk&lt;/code&gt; 还不错，所以在博客中进行了对 &lt;code&gt;gitalk&lt;/code&gt; 的集成，特此记录。&lt;/p&gt;</description></item><item><title>免费的东西最贵</title><link>https://fwhyy.com/2018/10/the-most-expensive-thing-is-free/</link><pubDate>Wed, 24 Oct 2018 00:30:19 +0800</pubDate><guid>https://fwhyy.com/2018/10/the-most-expensive-thing-is-free/</guid><description>&lt;p&gt;国庆期间，收到七牛的测试域名回收邮件，没细看也没怎么在意，因为我仅仅只是拿七牛的对象存储作为我博客的图床而已，但这两天发现我博客中的图片地址全部失效了，进入到七牛的管理后台，在对应的&lt;code&gt;bucket&lt;/code&gt;中图片已经不能预览和下载了。&lt;/p&gt;</description></item><item><title>Hexo的一些坑</title><link>https://fwhyy.com/2017/09/some-of-the-pits-in-hexo/</link><pubDate>Fri, 01 Sep 2017 08:36:34 +0800</pubDate><guid>https://fwhyy.com/2017/09/some-of-the-pits-in-hexo/</guid><description>&lt;p&gt;最近在研究&lt;code&gt;Angular4&lt;/code&gt;，将&lt;code&gt;Mac&lt;/code&gt;上的&lt;code&gt;node&lt;/code&gt;和&lt;code&gt;npm&lt;/code&gt;都升级为了最新版本，当使用&lt;code&gt;hexo&lt;/code&gt;的时候发现报错，当即决定将&lt;code&gt;hexo&lt;/code&gt;也升级最新版本。&lt;/p&gt;
&lt;p&gt;升级完&lt;code&gt;hexo&lt;/code&gt;，将所有的博客迁移过来，执行&lt;code&gt;hexo g&lt;/code&gt;，&lt;code&gt;hexo s&lt;/code&gt;，很顺利，没有任何问题，马上执行&lt;code&gt;hexo d&lt;/code&gt;发布到服务器，发现页面显示如下图：&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201301949948.webp" alt="" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;查看本地环境的&lt;code&gt;public&lt;/code&gt;目录，发现生成的&lt;code&gt;html&lt;/code&gt;页面的代码就如上图，但本地运行又是正常的。一个直接的反应就是，上面的代码是在运行时依赖&lt;code&gt;node&lt;/code&gt;解析成&lt;code&gt;html&lt;/code&gt;页面的。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ssh&lt;/code&gt;到&lt;code&gt;vps&lt;/code&gt;上查看&lt;code&gt;node&lt;/code&gt;版本，发现很低，一通折腾升级&lt;code&gt;node&lt;/code&gt;版本，最终将&lt;code&gt;vps&lt;/code&gt;上&lt;code&gt;node&lt;/code&gt;和&lt;code&gt;npm&lt;/code&gt;版本升级到和本地环境一致，发现网站依然不能正常运行。&lt;/p&gt;
&lt;p&gt;尝试将本地&lt;code&gt;public&lt;/code&gt;目录中的文件删掉，发现本地环境依然正常运行，这时才恍然大悟，本地执行&lt;code&gt;hexo s&lt;/code&gt;，并不是执行的&lt;code&gt;public&lt;/code&gt;目录中的内容，而是动态编译运行的。&lt;/p&gt;
&lt;p&gt;重新&lt;code&gt;hexo init hblog&lt;/code&gt;，安装步骤重新来了一个，执行&lt;code&gt;hexo g&lt;/code&gt; 发现&lt;code&gt;public&lt;/code&gt;目录中生成的&lt;code&gt;html&lt;/code&gt;已经正常，&lt;code&gt;hexo d&lt;/code&gt;发布到服务器，一切OK。&lt;/p&gt;
&lt;h2 id="总结"&gt;总结&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;对执行原理的不了解，导致走了很多弯路，瞎折腾了翻&lt;/li&gt;
&lt;li&gt;hexo本地运行并不是运行的public中的内容&lt;/li&gt;
&lt;li&gt;服务器端无需安装node，也可以运行hexo&lt;/li&gt;
&lt;li&gt;至今还不知道开始生成的html不正确是什么原因导致&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>在Linode上的Ubuntu12.04中搭建Hexo</title><link>https://fwhyy.com/2016/09/build-ubuntu12-04-in-linode-on-hexo/</link><pubDate>Fri, 02 Sep 2016 06:42:53 +0800</pubDate><guid>https://fwhyy.com/2016/09/build-ubuntu12-04-in-linode-on-hexo/</guid><description>&lt;p&gt;自从接触了Markdown后就喜欢上了，写博客自然也就想使用Markdown，但Wordpress中的Markdown插件都不怎么好用。找了很久终于找了一个在当时感觉还不错的方法，使用马克飞象写然后导出成Html在Wordpress的后台进行发布，具体参见《&lt;a href="http://fwhyy.com/2015/06/use-markdown-in-wordpress/"&gt;WordPress使用Markdown&lt;/a&gt;》。虽然效果还不错但操作起来比较繁琐，所以经过一番折腾，使用Hexo代替了Wordpress，本文主要讲下怎样在Linode中搭建Hexo。&lt;/p&gt;
&lt;p&gt;如果您还不知道Linode和Hexo是什么，自行Google之，本文不做介绍。&lt;/p&gt;
&lt;p&gt;2015年初在Linode购买了VPS，机房自然选择了亚洲的东京机房。安装的Ubuntu12.04的操作系统，因为对Linx系统不熟，选择了最省事的&lt;a href="http://lnmp.org/"&gt;lnmp&lt;/a&gt; 。lnmp中自带nginx，所以Hexo的部署也就使用nginx做为服务器。&lt;/p&gt;</description></item></channel></rss>