Skip to content

Latest commit

 

History

History
89 lines (70 loc) · 4.02 KB

README.md

File metadata and controls

89 lines (70 loc) · 4.02 KB

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

> import-meta-resolve-demo@1.0.0 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 })