Open TheJaredWilcurt opened 1 year ago
Do the package.json files have an "export" key to map exports to file names?
// /node_modules/@vue/test-utils/package.json
...
"main": "dist/vue-test-utils.js",
"module": "dist/vue-test-utils.esm.js",
"exports": {
".": {
"default": "./dist/vue-test-utils.js",
"require": "./dist/vue-test-utils.js",
"import": "./dist/vue-test-utils.esm.js"
}
},
...
// /node_modules/vuex/package.json
...
"main": "dist/vuex.common.js",
"module": "dist/vuex.esm.js",
"exports": {
".": {
"module": "./dist/vuex.esm.js",
"require": "./dist/vuex.common.js",
"import": "./dist/vuex.mjs"
},
"./": "./"
},
...
// /node_modules/axios/package.json
...
"main": "index.js",
...
// /node_modules/flush-promises/package.json
...
"main": "index.js",
...
The flush-promises
and axios
imports do not have a linting error, and do not have exports
or module
defined in their package.json
.
hey, I'm running into the same issue while importing @multiformats/multiaddr
the issue may comes from nested export of "."
@vue/test-utils
@multiformats/multiaddr
this syntax look good according to nodejs doc https://nodejs.org/docs/latest-v16.x/api/packages.html#package-entry-points but is no resolved by eslint-plugin-import
Updated issue title based on this new information.
Do they have a "main", though?
This plugin uses resolve
, which does not yet support "exports".
Updated previous example to answer question
Thank you for the head up @ljharb
No "main"
neither in @multiformats/multiaddr
I looked at the resolve
source it seems neither the legacy "module"
nor "exports"
is supported
From Node.js 12 having only "exports"
is fine, "main"
is only used as a fallback when the former is missing. Since the oldest Node.js maintained LTS is 14 "exports"
should be the default resolution.
This issue also occurs with react-hook-form, which does have a "main"
field. For some reason, the issue does not occur with webpack 4, only 5. The error in the debug log comes from an webpack dependency (that conflicts with a eslint-import-resolver-webpack dependency).
eslint-plugin-import:resolver:webpack Error during module resolution: Error: Package path . is not exported from package /Users/torinfrancis/projects/churro/node_modules/react-hook-form (see exports field in /Users/torinfrancis/projects/churro/node_modules/react-hook-form/package.json)
at /Users/torinfrancis/projects/churro/node_modules/webpack/node_modules/enhanced-resolve/lib/ExportsFieldPlugin.js:104:7
I can resolve the issue by changing the react-hook-form package.json from
"exports": {
"./package.json": "./package.json",
".": {
"types": "./dist/index.d.ts",
"import": "./dist/index.esm.mjs",
"require": "./dist/index.cjs.js"
}
},
to
"exports": {
"./package.json": "./package.json",
".": "./dist/index.esm.mjs"
},
Of course, this isn't a real solution, but seems to indicate that it's specifically the conditional exports syntax that is a problem for the resolver
👋 Just noting that I ran into this with graphql-request
as well, which only has exports
and not main
:
...
"exports": {
".": {
"require": {
"types": "./build/cjs/index.d.ts",
"default": "./build/cjs/index.js"
},
"import": {
"types": "./build/esm/index.d.ts",
"default": "./build/esm/index.js"
}
}
},
...
Also happening with solid-js
Until 2023, the latest version of Node.js, 20.4.0, has arrived, yet people still refuse to embrace ESM. Why is that?
@13OnTheCode because it's not actually better.
Yeah it's the missing "main"
field which causes an error on sql-template-tag
package which appears to be ESM only and only has an exports
set in the package.json
I'm getting this error when trying to upgrade to the latestdate-fns
package, which does have main
defined in its package.json (in addition to exports
). https://github.com/date-fns/date-fns/blob/a39b8058f777517e8040193ba597dff18765951a/package.json#L17
@chawes13 indeed, that points to https://unpkg.com/browse/date-fns@3.1.0/index.js which should work fine. Can you file a new issue for this one, since it's not related to "exports" support?
@ljharb See #1479
I have the same issue with @nats-io/nats-core:
Unable to resolve path to module '@nats-io/nats-core' import/no-unresolved
From their package.json:
"name": "@nats-io/nats-core",
"version": "3.0.0-30",
"files": [
"lib/",
"LICENSE",
"README.md"
],
"types": "./lib/mod.d.js",
"exports": {
".": "./lib/mod.js",
"./internal": "./lib/internal_mod.js"
},
All dependencies are on their latest versions. Errors:
Code:
vuex
is in thedependencies
and@vue/test-utils
is in thedevDependencies
inpackage.json
. Both are installed and in thenode_modules
folder.What's interesting is that they fail across all test files, but no other
node_module
imports fail. It's just these two.eslintrc.js
tjw-import
can be seen here: