Demo repo for using import.meta.resolve
- Clone the repo
- Install NodeJS LTS (or run
nvm use
) - Install dependencies with
npm ci
You can now run the demo by running npm run demo
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'
}
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'
}
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 })