Javascript 在webpack中,什么是更好的爬树方式?
我想知道,以下两个选项中的哪一个是在网页中更好地摇树的正确方法:Javascript 在webpack中,什么是更好的爬树方式?,javascript,webpack,ecmascript-6,es6-modules,tree-shaking,Javascript,Webpack,Ecmascript 6,Es6 Modules,Tree Shaking,我想知道,以下两个选项中的哪一个是在网页中更好地摇树的正确方法: import { someFeature } from 'someModule' // Option 1 import { isEmpty } from 'lodash' // Example 1 或者 如果我理解你的问题,我认为你是在要求命名导出优于默认导出的好处,以便更好地摇树或减少包大小 为了更好地摇树,建议使用命名导出而不是默认导出。据此, 有时,您可能会尝试导出一个具有多个属性的大型对象作为默认导出。这是一种反模式,
import { someFeature } from 'someModule' // Option 1
import { isEmpty } from 'lodash' // Example 1
或者
如果我理解你的问题,我认为你是在要求命名导出优于默认导出的好处,以便更好地摇树或减少包大小 为了更好地摇树,建议使用命名导出而不是默认导出。据此, 有时,您可能会尝试导出一个具有多个属性的大型对象作为默认导出。这是一种反模式,禁止正确摇动树木: 因此,不要使用默认导出作为示例1,而使用命名导出作为示例2 示例1
// This is default export. Do not use it for better tree shaking
// export.js
export default {
propertyA: "A",
propertyB: "B",
}
// import.js
import export from './exports';
示例2
// This is name export. Use it for better tree shaking
// export.js
export const propertyA = "A";
export const propertyB = "B";
// import.js
import { propertyA } from './exports';
因此,在第一个示例中,它将同时导出
propertyA
和propertyB
,而在第二个示例中,它将只导出propertyA
,这将减少捆绑包的大小。无论您使用选项一或两,都不可能从“someFeature”中“树抖动”未使用的内容如果这是一个具有许多属性的大型对象或类,而您只使用其中的一些属性。因此,最好的选择是将您的“someFeature”分割成较小的部分,并将这些较小的部分作为命名导出导出。您阅读了文档吗?你给出的代码示例是不可互换的,所以我不明白这里真正的问题是什么?您是否在询问是否应该对命名的文件使用默认导出?因为在本例中,在树震动方面没有区别,这完全取决于someModule
和someModule/someFeature
的实现。请发布它们。@Bergi如果该模块是第三方库(比如lodash?@Utkarspramodgupta),那么它仍然取决于它们如何实现其导出-请发布它们(但减少到一个最小的示例)。特别是关于lodash,因为它还没有使用ES6导出,所以有各种解决方法(从子包导入,使用'lodash es',使用修复lodash的babel插件…)。您好,@Farhad感谢您的回复。请阅读更新的问题。@Utkarspramodgupta树抖动主要取决于导出的方式,而不是导入的方式。如果您是专门针对lodash的,那么这是一本很好的读物。如果对你有帮助,请告诉我,然后我会更新我的答案
// This is name export. Use it for better tree shaking
// export.js
export const propertyA = "A";
export const propertyB = "B";
// import.js
import { propertyA } from './exports';