Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在webpack中,什么是更好的爬树方式?_Javascript_Webpack_Ecmascript 6_Es6 Modules_Tree Shaking - Fatal编程技术网

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';