<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: sbjs</title><link>https://news.ycombinator.com/user?id=sbjs</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Wed, 29 Apr 2026 21:39:06 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=sbjs" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by sbjs in "(ab?)using Node module hooks to speed up development"]]></title><description><![CDATA[
<p>It's a highly optimized and extremely simple yet robust implementation of it, sure. Is that reason to dismiss it?<p>Consider Vite's node-side HMR implementation. It creates <i>its own</i> module system <i>on top of</i> Node's native module system, using `node:vm`. So its modules are really second class citizens that have to be glued to the native module system.<p>This library used to do that, but moved to using Node's native module hooks, so that there's nothing magical going on, and you can still use the `import` expression to import your HMR modules, they just auto-update when saving.</p>
]]></description><pubDate>Wed, 07 May 2025 12:51:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=43914990</link><dc:creator>sbjs</dc:creator><comments>https://news.ycombinator.com/item?id=43914990</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43914990</guid></item><item><title><![CDATA[New comment by sbjs in "(ab?)using Node module hooks to speed up development"]]></title><description><![CDATA[
<p>That's orthogonal, and in fact you probably <i>would</i> use TypeScript to translate JSX to JS when using this library. What this does is (a) provide a Node.js module hook to call your transpile function when it encounters TSX/JSX files, and (b) provide a Node.js module that lets you remap imports, including "react/jsx-runtime" if you want a different JSX implementation.</p>
]]></description><pubDate>Wed, 07 May 2025 12:19:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=43914713</link><dc:creator>sbjs</dc:creator><comments>https://news.ycombinator.com/item?id=43914713</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43914713</guid></item><item><title><![CDATA[New comment by sbjs in "(ab?)using Node module hooks to speed up development"]]></title><description><![CDATA[
<p>It's English, it just looks like regex. In English, the ? belongs <i>inside</i> the parens in this case.</p>
]]></description><pubDate>Wed, 07 May 2025 12:10:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=43914654</link><dc:creator>sbjs</dc:creator><comments>https://news.ycombinator.com/item?id=43914654</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43914654</guid></item><item><title><![CDATA[New comment by sbjs in "(ab?)using Node module hooks to speed up development"]]></title><description><![CDATA[
<p>Just updated the text to be hopefully much clearer.</p>
]]></description><pubDate>Wed, 07 May 2025 11:58:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=43914551</link><dc:creator>sbjs</dc:creator><comments>https://news.ycombinator.com/item?id=43914551</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43914551</guid></item><item><title><![CDATA[New comment by sbjs in "(ab?)using Node module hooks to speed up development"]]></title><description><![CDATA[
<p>Oh no, I must have mis-explained it.<p>The file `site/myfile.js` <i>does</i> exist. All FileTree does is recursively load all files in a dir into memory.<p>The `useTree` module hook does two things:<p>* Pulls the file from memory when loading it instead of from disk<p>* Adds a cache busting query string when resolving it for invalidation<p>Combined with tree.watch(), this essentially allows you to add a very lightweight but extremely accurate hot module replacement system into Node.js<p><pre><code>    const tree = new FileTree('src', import.meta.url)
    registerHooks(useTree(tree))
    tree.watch().on('filesUpdated', () => import(tree.root + '/myfile.js'))
    import(tree.root + '/myfile.js')
</code></pre>
Now save src/myfile.js and see it re-<i>executed</i></p>
]]></description><pubDate>Wed, 07 May 2025 11:41:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=43914421</link><dc:creator>sbjs</dc:creator><comments>https://news.ycombinator.com/item?id=43914421</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43914421</guid></item><item><title><![CDATA[New comment by sbjs in "(ab?)using Node module hooks to speed up development"]]></title><description><![CDATA[
<p>Just added some code samples, thanks for the suggestion.</p>
]]></description><pubDate>Wed, 07 May 2025 11:36:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=43914387</link><dc:creator>sbjs</dc:creator><comments>https://news.ycombinator.com/item?id=43914387</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43914387</guid></item><item><title><![CDATA[Show HN: Mid-level Node.js helpers for building a front-end website]]></title><description><![CDATA[
<p>Hi HN. I can't stop trying new ways to write my websites, and the web world is ever evolving. For both reasons, I stopped trying to write a build tool for developing front-ends, and wrote some helpers for Node.js that ideally would be part of <i>any</i> front-end build tool. They're high-enough level that you could use them directly, and low-enough level that you could build a framework on top of them (Vite could refactor itself to use them and remove a lot of its own code).</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=43907393">https://news.ycombinator.com/item?id=43907393</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Tue, 06 May 2025 17:09:32 +0000</pubDate><link>https://immaculata.dev/</link><dc:creator>sbjs</dc:creator><comments>https://news.ycombinator.com/item?id=43907393</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43907393</guid></item><item><title><![CDATA[Comparing Immaculata to Vite]]></title><description><![CDATA[
<p>Article URL: <a href="https://immaculata.dev/blog/comparison-to-vite.html">https://immaculata.dev/blog/comparison-to-vite.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=43899533">https://news.ycombinator.com/item?id=43899533</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Mon, 05 May 2025 21:16:58 +0000</pubDate><link>https://immaculata.dev/blog/comparison-to-vite.html</link><dc:creator>sbjs</dc:creator><comments>https://news.ycombinator.com/item?id=43899533</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43899533</guid></item><item><title><![CDATA[(ab?)using Node module hooks to speed up development]]></title><description><![CDATA[
<p>Article URL: <a href="https://immaculata.dev/blog/hacking-nodejs-modules.html">https://immaculata.dev/blog/hacking-nodejs-modules.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=43896609">https://news.ycombinator.com/item?id=43896609</a></p>
<p>Points: 38</p>
<p># Comments: 16</p>
]]></description><pubDate>Mon, 05 May 2025 16:13:21 +0000</pubDate><link>https://immaculata.dev/blog/hacking-nodejs-modules.html</link><dc:creator>sbjs</dc:creator><comments>https://news.ycombinator.com/item?id=43896609</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43896609</guid></item><item><title><![CDATA[New comment by sbjs in "Why I ever wrote Clojure"]]></title><description><![CDATA[
<p>Can't remember, was like 10 years ago. But basically after I finished mastering the last feature I needed to, probably macros.</p>
]]></description><pubDate>Sat, 03 May 2025 23:09:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=43883094</link><dc:creator>sbjs</dc:creator><comments>https://news.ycombinator.com/item?id=43883094</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43883094</guid></item><item><title><![CDATA[New comment by sbjs in "Why I ever wrote Clojure"]]></title><description><![CDATA[
<p>To clarify, I don't mean that Rich didn't <i>also</i> have extremely good reasons to make Clojure, given he was using Java (and maybe C++) <i>in 2007</i>. They're not the best languages now, but they were so broken back then that they practically <i>caused</i> the language revolution that caused Clojure and Go and Node etc to flourish.</p>
]]></description><pubDate>Sat, 03 May 2025 20:56:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=43882240</link><dc:creator>sbjs</dc:creator><comments>https://news.ycombinator.com/item?id=43882240</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43882240</guid></item><item><title><![CDATA[New comment by sbjs in "Why I ever wrote Clojure"]]></title><description><![CDATA[
<p>I thought it was self explanatory. It had new idioms I had not yet learned and internalized, so I fully absorbed it. When that was finished, I needed something else to do the same thing with. It's like listening to a song on repeat 10-100 times (depending on the song) when you first hear it. You get everything you can out of it and move on when it's empty.</p>
]]></description><pubDate>Sat, 03 May 2025 20:47:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=43882174</link><dc:creator>sbjs</dc:creator><comments>https://news.ycombinator.com/item?id=43882174</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43882174</guid></item><item><title><![CDATA[New comment by sbjs in "Why I ever wrote Clojure"]]></title><description><![CDATA[
<p>I guess that confirms my theory.</p>
]]></description><pubDate>Sat, 03 May 2025 20:45:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=43882159</link><dc:creator>sbjs</dc:creator><comments>https://news.ycombinator.com/item?id=43882159</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43882159</guid></item><item><title><![CDATA[Why I ever wrote Clojure]]></title><description><![CDATA[
<p>Article URL: <a href="https://thesoftwarephilosopher.com/blog/2025-05-03-why-i-ever-wrote-clojure.html">https://thesoftwarephilosopher.com/blog/2025-05-03-why-i-ever-wrote-clojure.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=43879259">https://news.ycombinator.com/item?id=43879259</a></p>
<p>Points: 89</p>
<p># Comments: 50</p>
]]></description><pubDate>Sat, 03 May 2025 14:29:02 +0000</pubDate><link>https://thesoftwarephilosopher.com/blog/2025-05-03-why-i-ever-wrote-clojure.html</link><dc:creator>sbjs</dc:creator><comments>https://news.ycombinator.com/item?id=43879259</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43879259</guid></item><item><title><![CDATA[Build.js.dev.build]]></title><description><![CDATA[
<p>Article URL: <a href="https://thesoftwarephilosopher.com/blog/2025-04-29-new-js-framework.html">https://thesoftwarephilosopher.com/blog/2025-04-29-new-js-framework.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=43846332">https://news.ycombinator.com/item?id=43846332</a></p>
<p>Points: 1</p>
<p># Comments: 1</p>
]]></description><pubDate>Wed, 30 Apr 2025 15:06:41 +0000</pubDate><link>https://thesoftwarephilosopher.com/blog/2025-04-29-new-js-framework.html</link><dc:creator>sbjs</dc:creator><comments>https://news.ycombinator.com/item?id=43846332</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43846332</guid></item><item><title><![CDATA[Build.js.dev.build]]></title><description><![CDATA[
<p>Article URL: <a href="https://thesoftwarephilosopher.com/blog/2025-04-29-new-js-framework.html">https://thesoftwarephilosopher.com/blog/2025-04-29-new-js-framework.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=43840091">https://news.ycombinator.com/item?id=43840091</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Wed, 30 Apr 2025 01:09:48 +0000</pubDate><link>https://thesoftwarephilosopher.com/blog/2025-04-29-new-js-framework.html</link><dc:creator>sbjs</dc:creator><comments>https://news.ycombinator.com/item?id=43840091</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43840091</guid></item><item><title><![CDATA[A New Way to Vendor]]></title><description><![CDATA[
<p>Article URL: <a href="https://immaculata.dev/blog/a-new-way-to-vendor.html">https://immaculata.dev/blog/a-new-way-to-vendor.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=43836629">https://news.ycombinator.com/item?id=43836629</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Tue, 29 Apr 2025 18:58:50 +0000</pubDate><link>https://immaculata.dev/blog/a-new-way-to-vendor.html</link><dc:creator>sbjs</dc:creator><comments>https://news.ycombinator.com/item?id=43836629</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43836629</guid></item><item><title><![CDATA[New comment by sbjs in "Immaculata"]]></title><description><![CDATA[
<p>Thanks, yeah it sounds like we have similar goals. Where's your project so I can take a look?</p>
]]></description><pubDate>Mon, 28 Apr 2025 22:17:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=43826719</link><dc:creator>sbjs</dc:creator><comments>https://news.ycombinator.com/item?id=43826719</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43826719</guid></item><item><title><![CDATA[Immaculata]]></title><description><![CDATA[
<p>Article URL: <a href="https://immaculata.dev/blog/announcing-immaculata.html">https://immaculata.dev/blog/announcing-immaculata.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=43825974">https://news.ycombinator.com/item?id=43825974</a></p>
<p>Points: 4</p>
<p># Comments: 3</p>
]]></description><pubDate>Mon, 28 Apr 2025 20:50:52 +0000</pubDate><link>https://immaculata.dev/blog/announcing-immaculata.html</link><dc:creator>sbjs</dc:creator><comments>https://news.ycombinator.com/item?id=43825974</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43825974</guid></item><item><title><![CDATA[Show HN: Immaculata.dev, TypeScript DX Primitives]]></title><description><![CDATA[
<p>Article URL: <a href="https://immaculata.dev/">https://immaculata.dev/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=43751247">https://news.ycombinator.com/item?id=43751247</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Mon, 21 Apr 2025 12:33:29 +0000</pubDate><link>https://immaculata.dev/</link><dc:creator>sbjs</dc:creator><comments>https://news.ycombinator.com/item?id=43751247</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43751247</guid></item></channel></rss>