【问题标题】:Webpack tree shaking can’t extract unused functionWebpack tree-shaking 无法提取未使用的函数
【发布时间】:2018-06-29 15:42:39
【问题描述】:

当我使用webpackUglifyjsWebpackPlugin 时,我会尝试缩小代码:

// this is test.js
export const ceil = Math.ceil

export const random = Math.random

// webpack entry
import { ceil } from './test'

export default ceil(3.3)

我明白了:

 // formated
 "use strict";
 n.d(t,"a",function(){return r});
 var r=Math.ceil;
 Math.random// still exist?

如果我缩小

// this is test.js
export const ceil = Math.ceil

export const random = 1 // or string 

我会恢复正常的。

那么,为什么Math.random 仍然存在? 摇树不行吗?

webpack:3.10.0
UglifyjsWebpackPlugin: 1.1.6

谢谢!

【问题讨论】:

    标签: webpack tree-shaking


    【解决方案1】:

    您的问题有点不清楚,但Math.random 是 javascript 标准库的一部分,并且始终包含在每个浏览器中。因此,您不能摇晃它,但您也不必担心它的大小:您可以免费“获得”Math.random

    换句话说,Tree Shaking 是一种减少捆绑包大小的工具。 Math.random 的定义一开始就不是捆绑包的一部分,也不会影响捆绑包的大小。

    (注意:Math.ceil也是如此)

    【讨论】:

    • 感谢您的回答。我对您的回答有疑问:为什么我'得到'Math.random,如果我写很多Math.random,它不会增加大小?很抱歉我不会说英语,感谢您的宝贵时间。
    • @JJJ Math.random 返回一个值。所以用const random = Math.randomrandom等于一个随机值,它不等于Math.random函数。如果从未使用过const random,则摇树应用程序可能会删除const random = Math.random,但不会删除Math.random(因为同样,Math.random 是由浏览器提供的)。请注意,在您的第一个缩小示例中,const random 是如何被删除的。有意义吗?
    • 另外,有点不清楚您添加的第一个缩小示例的哪个部分作为评论,但是如果在第一个示例中缩小后确实仍然存在一个单独的 Math.random 调用(即文件结束只需使用Math.random 并且您会质疑为什么对Math.random 的调用仍然存在),我无法告诉您。这可能是摇树算法中的错误。我最初假设您的第一个缩小文件看起来像 "use strict"; n.d(t,"a",function({return r}); var r=Math.ceil;,其他所有内容都是您作为 cmets 添加的。
    猜你喜欢
    • 2018-04-29
    • 2019-02-08
    • 1970-01-01
    • 2018-05-19
    • 2017-09-05
    • 2019-02-14
    • 1970-01-01
    • 2017-11-24
    • 2020-05-19
    相关资源
    最近更新 更多