建议
🔍 搜索词
vscode, autoimport, importModuleSpecifier, "重新导出", barrel, tree-shaking
✅ 可实现性检查清单
我的建议符合以下准则:
- 这不会对现有的TypeScript/JavaScript代码造成破坏性的更改
- 这不会改变现有JavaScript代码的运行时行为
- 这可以在不根据表达式的类型发出不同的JS的情况下实现
- 这不是一个运行时特性(例如库功能、带有JavaScript输出的非ECMAScript语法、JS的新语法糖等)
- 这个特性将与TypeScript's Design Goals的其他部分一致。
⭐ 建议
一些库提供了使用子路径模块说明符导入模块的能力(import {SubModule} from "@scope/library/submodule"
),以及在顶级重新导出模块(import {SubModule} from "@scope/library"
)。在某些情况下,希望优先选择子路径说明符而不是顶级("barrel")重新导出。我不认为有办法使用当前的importModuleSpecifier
选项来实现这一点。
理想情况下,模式应该解析首选的说明符,然后向上遍历任何export from
语句并使用原始源。如果不可能,也许可以实现一个MRU选项,这样如果我为给定模块手动选择一个说明符路径一次,那么将来的自动导入也将使用相同的路径。
💻 使用案例
我通常坚持默认的"最短"偏好,这倾向于顶级重新导出(如果存在)。这使得构建工具更难证明给定模块是tree-shakable,并且在少数情况下可能导致循环引用问题,因为相互依赖的barrel导出的加载顺序变得过于复杂以至于无法自动解开。仅导入正在使用的子模块可以避免这些问题。
4条答案
按热度按时间aiazj4mn1#
在写完这段话后,我看到了 #41083 ,虽然它与此不同,但也可能通过添加 MRU 跟踪来解决。如果我能手动选择正确的选项几次来“训练”自动导入,我不介意没有一个 do-what-I-mean
importModuleSpecifier
。z9zf31ra2#
我是一个维护者,正在开发一个库。我们为捆绑暴露了索引文件,但在我开发项目时,我不想让自动导入默认使用它们,因为这会导致导入循环。
有一个设置
directImports: true
会很好这是我在设置中找到的,无关的内容
fxnxkyjh3#
我遇到了相同的问题。对于我的库,所有的导出都被合并到一个名为 "Modules.generated.ts" 的桶模块中(称为“Modules.generated.ts”),它重新导出每个其他模块。现在,当我尝试导入一个邻居时,它会自动导入顶层的桶模块,从而导致循环模块导入。
这个问题涉及到多个方面:
rootDir
),我希望自动导入优先考虑重新导出。我个人希望通过指令注解为特定模块触发这种行为,例如
// @ts-external-export
。但设置也可以实现。我认为并不是每个人都希望始终启用这种行为。de90aj5v4#
看起来这是合理的。桶模块只用于外部使用。但是当你在处理你的包时,你想要直接导入。