(ab?)using Node module hooks to speed up development

32 sbjs 13 5/5/2025, 4:13:21 PM immaculata.dev ↗

Comments (13)

whizzter · 20m ago
With Typescript you could(prob still can) specify how JSX tags are translated, so you can get the regular data structure without React dependency.
sbjs · 1m ago
That's orthogonal, and in fact you probably would 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.
devrandoom · 32m ago
It's hard to get the idea down from one's head into a document, as this text shows.
sbjs · 22m ago
Just updated the text to be hopefully much clearer.
skinkestek · 5h ago
Am I missing something, or is the content here too minimal?

For this to be genuinely useful, I’d expect at least a few code examples—and ideally a link to a working repo to show it in action.

sbjs · 44m ago
Just added some code samples, thanks for the suggestion.
noob_07 · 3h ago
I do not follow, can anyone help with more code/config examples of how to leverage this?
shakna · 3h ago
One example from the site:

    import module from 'node:module'
    const tree = new FileTree('site', import.meta.url)
    module.registerHooks(hooks.useTree(tree))
    import('site/myfile.js')
Here, site/myfile.js doesn't exist. It gets created as a reference by the FileTree library. Node thinks it is importing it. The import is also automatically reloaded, if the backend changes it. Caches are invalidated and objects replaced.
sbjs · 39m ago
Oh no, I must have mis-explained it.

The file `site/myfile.js` does exist. All FileTree does is recursively load all files in a dir into memory.

The `useTree` module hook does two things:

* Pulls the file from memory when loading it instead of from disk

* Adds a cache busting query string when resolving it for invalidation

Combined with tree.watch(), this essentially allows you to add a very lightweight but extremely accurate hot module replacement system into Node.js

1. const tree = new FileTree('src', import.meta.url)

2. tree.watch().on('filesUpdated', () => import(tree.root + '/myfile.js'))

3. registerHooks(useTree(tree))

4. Save src/myfile.js and see it re-executed

feisuzhu · 5h ago
(ab)?using ?
kaeruct · 5h ago
Using. But also maybe abusing.
carlosneves · 1h ago
I think he's proposing a fix for the regex in the title.

/(ab?)using/ matches:

- ausing

- abusing

while /(ab)?using/ matches:

- using

- abusing

sbjs · 10m ago
It's English, it just looks like regex. In English, the ? belongs inside the parens in this case.