Skip to content

thescientist13/import-meta-resolve-demo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

import-meta-resolve-demo

Demo repo for using import.meta.resolve

Demo

  1. Clone the repo
  2. Install NodeJS LTS (or run nvm use)
  3. Install dependencies with npm ci

You can now run the demo by running npm run demo

Observations

Missing main (ERR_MODULE_NOT_FOUND)

It looks like the @types/trusted-types package throws an ERR_MODULE_NOT_FOUND, presumably because it has an empty main field in package.json?

➜  import-meta-resolve-demo git:(master) ✗ npm run demo

> [email protected] demo
> node .

✅ SUCCESS: resolved lit at location =>  file:///Users/owenbuckley/Workspace/github/import-meta-resolve-demo/node_modules/lit/index.js
🚨 ERROR: could not resolve @types/trusted-types Error: Cannot find package '/Users/owenbuckley/Workspace/github/import-meta-resolve-demo/node_modules/@types/trusted-types' imported from /Users/owenbuckley/Workspace/github/import-meta-resolve-demo/index.js
    at legacyMainResolve (node:internal/modules/esm/resolve:204:26)
    at packageResolve (node:internal/modules/esm/resolve:827:14)
    at moduleResolve (node:internal/modules/esm/resolve:907:18)
    at defaultResolve (node:internal/modules/esm/resolve:1037:11)
    at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:650:12)
    at #cachedDefaultResolve (node:internal/modules/esm/loader:599:25)
    at #resolveAndMaybeBlockOnLoaderThread (node:internal/modules/esm/loader:615:38)
    at ModuleLoader.resolveSync (node:internal/modules/esm/loader:632:52)
    at Object.resolve (node:internal/modules/esm/initialize_import_meta:33:25)
    at file:///Users/owenbuckley/Workspace/github/import-meta-resolve-demo/index.js:6:34 {
  code: 'ERR_MODULE_NOT_FOUND'
}

No main exports map entry point (ERR_PACKAGE_PATH_NOT_EXPORTED)

Noticed that a handful of packages (@libsql/core, @types/ws, dunder-proto, math-intrinsics) do have an exports map...

"exports": {
  "./foo": {
    "...": "..."
  }
}

but they don't specifically have a "main" entry point subpath ('.') in their exports map:

When using the "exports" field, custom subpaths can be defined along with the main entry point by treating the main entry point as the "." subpath

"exports": {
  ".": "./index.js",
  "./foo": {
    "...": "..."
  }
}

And so as a result, import.meta.resolve will return a ERR_PACKAGE_PATH_NOT_EXPORTED error

🚨 ERROR: could not resolve @libsql/core Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: No "exports" main defined in /Users/owenbuckley/Workspace/github/import-meta-resolve-demo/node_modules/@libsql/core/package.json
    at exportsNotFound (node:internal/modules/esm/resolve:294:10)
    at packageExportsResolve (node:internal/modules/esm/resolve:641:9)
    at resolveExports (node:internal/modules/cjs/loader:591:36)
    at Module._findPath (node:internal/modules/cjs/loader:668:31)
    at Module._resolveFilename (node:internal/modules/cjs/loader:1130:27)
    at Function.resolve (node:internal/modules/helpers:187:19)
    at file:///Users/owenbuckley/Workspace/github/import-meta-resolve-demo/index.js:17:15
    at ModuleJob.run (node:internal/modules/esm/module_job:218:25)
    at async ModuleLoader.import (node:internal/modules/esm/loader:329:24)
    at async loadESM (node:internal/process/esm_loader:34:7) {
  code: 'ERR_PACKAGE_PATH_NOT_EXPORTED'
}

Node Built-ins Hijacking Dependencies

Resolved - this is indeed the expected behavior - nodejs/node#56652 (comment)

Noticed that when resolved the process package, import.meta.resolve resolves to the NodeJS built-in version

✅ SUCCESS: resolved process at location => node:process ({ isNodeBuiltIn: true })

About

Demo repo for using import.meta.resolve

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published