Cannot resolve imports with subpaths
OnkelTem opened this issue · 12 comments
I cannot get it working with any subpath imports, e.g.
some-file.tsx:
import { item } from 'package/subpath'
leads to an error:
ESLint: Unable to resolve path to module 'package/subpath'.(import/no-unresolved)
At the same time, TypeScript works and doesn't find any issues.
ESLint config:
.eslintrc.js:
module.exports = {
parser: '@typescript-eslint/parser',
parserOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
},
settings: {
'import/extensions': ['.ts', '.tsx', '.mts', '.js', '.jsx', '.mjs'],
'import/resolver': {
typescript: true,
},
},
plugins: ['@typescript-eslint', 'react-hooks', 'only-warn'],
extends: ['airbnb', 'plugin:@typescript-eslint/recommended', 'plugin:react-hooks/recommended', 'prettier'],
This is a part of package.json of package
:
"exports": {
"require": "./dist/cjs/index.js",
"import": "./dist/mjs/index.js",
"default": "./dist/mjs/index.js"
},
"main": "./dist/cjs/index.js",
"module": "./dist/mjs/index.js",
"types": "./dist/types/index.d.ts",
ESLint: 8.x
That's because we don't support exports
yet - since resolve
also doesn't. When resolve
does, so will we.
Separately, your exports
field there HAS no subpaths, so nothing should resolve a subpath anyways.
Just a question - I get similar error, but related to package imports:
import/no-unresolved, Unable to resolve path to module '#lib/result'.
Seems that package imports also not supported by the node resolver?
Webpack uses https://github.com/webpack/enhanced-resolve.
It highly configurable and fully supports all possible features.
Maybe it can replace current node resolver.
(And current webpack resolver too)
Or use built-in possibilities:
This will work for node projects, and will work better than handmade resolver.
const { createRequire } = require( "node:module" );
const url = require( "node:url" );
function resolve ( name, from ) {
try {
return createRequire( url.pathToFileURL( from ) ).resolve( name );
}
catch {}
}