Although currently in RC, NodeJS implementation of custom loaders / imports / hooks is changing (in the better for Greenwood I think) moving from having to be be invoked with a flag (which is very clunky for downstream users
$ c8 node --experimental-loader ./test-exp-loader.js ./node_modules/mocha/bin/mocha "./test/**/**/*.spec.js"
(node:30066) ExperimentalWarning: `--experimental-loader` may be removed in the future; instead use `register()`:
--import 'data:text/javascript,import { register } from "node:module"; import { pathToFileURL } from "node:url"; register("./test-exp-loader.js", pathToFileURL("./"));'
const { register } = require('node:module');
const { pathToFileURL } = require('node:url');
register('http-to-https', pathToFileURL(__filename));
// Because this is a dynamic `import()`, the `http-to-https` hooks will run
// to handle `./my-app.js` and any other files it imports or requires.
import('./my-app.js');
Details
Hopefully this lands as stable in a version of NodeJS soon, though I expect it to require a minimum NodeJS version given the release timeline, but hopefully in time for a 1.0 release on the Greenwood side.
Summary
Although currently in RC, NodeJS implementation of custom loaders / imports / hooks is changing (in the better for Greenwood I think) moving from having to be be invoked with a flag (which is very clunky for downstream users
To something like this in our index.js instead https://nodejs.org/api/module.html#customization-hooks
Details
Hopefully this lands as stable in a version of NodeJS soon, though I expect it to require a minimum NodeJS version given the release timeline, but hopefully in time for a 1.0 release on the Greenwood side.
This also means we should be able to remove all mentions of any pre-requisite configuration from our docs and would resolve https://github.com/ProjectEvergreen/greenwood/discussions/1217! https://www.greenwoodjs.io/docs/server-rendering/#custom-imports