register.mjs 945 B

1234567891011121314151617181920212223242526272829303132
  1. // ESM entry point for module-alias
  2. // Usage: node --import module-alias/register ./app.mjs
  3. import { register } from 'node:module'
  4. // Check Node version for registerHooks support (22.15+)
  5. const [major, minor] = process.versions.node.split('.').map(Number)
  6. const hasRegisterHooks = major > 22 || (major === 22 && minor >= 15)
  7. if (hasRegisterHooks) {
  8. // Node 22.15+ - use synchronous hooks on main thread
  9. const { registerHooks } = await import('node:module')
  10. const { resolveAlias, init } = await import('./esm-loader.mjs')
  11. init()
  12. registerHooks({
  13. resolve (specifier, context, nextResolve) {
  14. const resolved = resolveAlias(specifier, context.parentURL)
  15. if (resolved) {
  16. return nextResolve(resolved, context)
  17. }
  18. return nextResolve(specifier, context)
  19. }
  20. })
  21. } else {
  22. // Node 18.19 - 22.14 - use async hooks via worker thread
  23. register('./esm-loader.mjs', {
  24. parentURL: import.meta.url
  25. })
  26. }