【问题标题】:Webpack 4 Tree Shaking | Documentation | Example DiscrepancyWebpack 4 摇树 |文档 |示例差异
【发布时间】:2018-09-10 11:34:48
【问题描述】:

documentation for Webpack 4 中,他们提供了一个示例,其中包中的square 函数标有unused harmony export square 的注释。我跟着这个例子;但是,bundle.js 不包含此注释。

复制:

  1. Pull the code from here
  2. 执行yarn install
  3. 执行yarn run build

请在此处找到我的源代码:https://gitlab.com/trevor.screws/webpack-tutorial/tree/stackoverflow_question


编辑:

在开发模式下使用 Webpack 4.1.1,这是我的 bundle.js 文件中的输出:

/***/ 
"./src/math.js":
/*!*********************!*\
!*** ./src/math.js ***!
\*********************/
/*! exports provided: square, cube */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);
\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__,
\"square\", function() { return square; }); \n/* harmony export (binding) */
__webpack_require__.d(__webpack_exports__, \"cube\", function() { return cube;
});\nfunction square(x) {\r\n    return x * x;\r\n}\r\n\r\nfunction cube(x)
{\r\n    return x * x * x;\r\n}\n\n//# sourceURL=webpack:///./src/math.js?");

/***/ })
/******/ });

【问题讨论】:

  • 在生产模式下构建时,该功能不包括在内(即,它按预期工作)。但是,在开发模式下,该功能不会像文档中所说的那样标记为 /* 未使用的和声导出方块 */。
  • 我可以按照指南中的说明重现您的发现。我认为这是一个文档错误,在开发模式下,捆绑包中不再生成 unused harmony export square

标签: webpack tree-shaking


【解决方案1】:

您的函数没有被删除的原因是您正在使用mode: "development" 构建,它不包含支持死代码消除的缩小器。相关细节在Webpack的Tree Shaking Guide

缩小输出

所以我们已经使用importexport 语法提示我们要删除的“死代码”,但我们仍然需要从包中删除它。为此,我们将使用 -p(生产)webpack 编译标志来启用 uglifyjs 缩小插件。

请注意,--optimize-minimize 标志也可用于插入 UglifyJsPlugin。

从 webpack 4 开始,这也可以通过“模式”配置选项轻松切换,设置为 "production"

似乎 Webpack 本身不执行 tree-shaking(据我所知),而是将任务委托给您使用的任何缩小插件(通常是 UglifyJS,但 babel-minify-webpack-plugin 也是一个不错的插件)

【讨论】:

  • 嗨@rossipedia,感谢您抽出宝贵时间回复。我认为部分问题是,我期待 unused function 评论出现在开发模式的捆绑包中。我还可以在生产模式下确认它正在删除该功能,所以也许我昨天查看文件的旧版本时遇到了问题。我将更新问题以更具体地说明缺少的评论。看起来指南正在更新github.com/webpack/webpack.js.org/issues/1861 - 所以可能只是版本之间存在差异。
猜你喜欢
  • 2018-08-30
  • 1970-01-01
  • 2019-10-15
  • 1970-01-01
  • 2018-12-12
  • 2016-12-28
  • 2016-11-17
  • 2019-12-29
  • 2018-09-24
相关资源
最近更新 更多