-
Notifications
You must be signed in to change notification settings - Fork 12.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weβll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Option for auto-import to prefer direct exports over re-exports #43777
Comments
After writing this, I saw #41083 which isn't quite the same thing, but might also be solved by adding MRU tracking. I wouldn't mind not having a do-what-I-mean |
I have the same problem. For my library, all exports are rolled into a barrel module (called "Modules.generated.ts"), which re-exports every other module. Now, when I try to import a neighbour, it tries to auto-import the top-level barrel module, which causes circular module importing. There are multiple aspects to this:
I would personally want to trigger this behavior for a specific module with a directive comment, like |
It seems logical to have this. Barrel modules are only for external use. But when you are working on your package, you want the direct imports. |
Suggestion
π Search Terms
vscode, autoimport, importModuleSpecifier, "re-export", barrel, tree-shaking
β Viability Checklist
My suggestion meets these guidelines:
β Suggestion
Some libraries provide the ability to import modules using sub-path module specifiers (
import {SubModule} from "@scope/library/submodule"
, as well as re-exporting the module at top level (import {SubModule} from "@scope/library"
). In some circumstances, it is desirable to prefer the sub-path specifier over the top level ("barrel") re-export. I don't see any way to do that using the currentimportModuleSpecifier
options.Ideally, the mode would resolve the preferred specifier, then walk up any
export from
statements and use the original source. If that's not possible, perhaps an MRU option could be implemented, so that if I manually pick a specifier path for a given module once, that same path is used for future auto-imports.π» Use Cases
I normally stick to the default "shortest" preference, which prefers the top-level re-export (if present). This makes the build tooling work harder to prove that a given module is tree-shakable, and in rare cases can lead to circular reference issues, as the load order of interdependent barrel exports becomes too convoluted to untangle automatically. Importing only the sub-module being used can avoid these problems.
The text was updated successfully, but these errors were encountered: