4

我想知道,以下两个选项中的哪一个是在webpack中更好的Tree Shaking的正确方法:

import { someFeature } from 'someModule'  // Option 1
import { isEmpty } from 'lodash' // Example 1

或者,

import someFeature from 'someModule/someFeature' // Option 2
import isEmpty from 'lodash/isEmpty' // Example 2
4

2 回答 2

3

如果我理解您的问题,我认为您要求命名导出优于默认导出以更好地摇树或减小包大小。

为了更好地摇树,建议使用命名导出而不是默认导出。根据这篇文章

有时您可能会想导出一个具有许多属性的巨大对象作为默认导出。这是一种反模式,并禁止适当的摇树:

因此,不要使用默认导出作为示例 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';

因此,在第一个示例中,它将同时导出propertyApropertyB而在第二个示例中,它将仅导出propertyA,这将减小包大小。

于 2019-06-29T10:58:21.503 回答
0

无论您使用选项一还是二,如果这是一个具有许多属性的巨大对象或类并且您仅使用其中一些属性,则无法从“someFeature”中“摇晃”未使用的东西。所以最好的选择是将你的“someFeature”分成更小的部分,并将这些更小的部分导出为命名导出。

于 2019-06-29T11:36:45.230 回答