【发布时间】:2018-10-09 07:28:43
【问题描述】:
我的主要问题是:如果我将一个类型从 3rd 方库导入一次到我的项目中,然后在内部多次导入/导出它,我是否仍会产生每次直接从第三方库?
背景:
我最近开始使用名为 import-cost 的出色 vscode 扩展程序,它可以显示您导入的包的大小。例如:
import { cloneDeep } from 'lodash'; 70.7K
import cloneDeep from 'loadash/cloneDeep'; 14.9K // way better!!
这让我更加清楚我导入的所有内容最终将如何影响我的最终包大小。我注意到的一个特殊问题是从 3rd 方库中导入 TypeScript 类型。要仅导入一种类型,您仍然需要导入整个包。例如:
import { IComponentOptions } from 'angular'; 168.3K // Not cool!!!
如果不能以某种方式改善这种情况,我只是不确定它是否值得。
所以,我的问题是: 与其每次编写组件时都直接从 angular 导入这种类型,如果我执行以下操作,是否比每次都导入成本更低直接从角度?示例:
path/to/my/project/types/shims.d.ts
export { IComponentOptions } from 'angular';
path/to/my/project/components/myComponent/myComponent.cmpt.ts
import { IComponentOptions } from "../../types/shims";
import controller from './myComponent.ctrl';
import template from './myComponent.tpl.html';
const myComponent: IComponentOptions = {
template,
controller,
bindings: {
someBinding: '@'
}
};
export default myComponent;
如果在我的项目中多次像这样从shims文件导入IComponentOptions接口,是不是每次都要承担导入的费用,还是内部跨文件共享的概念少了?贵吗?
整个问题的含义不仅仅是打字稿打字,但这是目前引发此问题的特定用例。
如果有人能回答这个问题,我将不胜感激!谢谢
回答后编辑:
正如接受的答案所指出的,这实际上似乎是 import-cost 扩展的一个错误,因为仅从库中导入类型不应导致模块的代码被导入。我已经打开了一个问题here,希望能解决这个问题。
由于该问题确实具有更深远的影响,因此另一个答案也非常有用,重要的是要注意,尽管 import-cost 会显示每次导入的成本,但如果您多次导入某些内容,则不会比进口一次更昂贵。
【问题讨论】:
标签: typescript import bundle typescript-typings