【问题标题】:If webpack tree-shaking handle node_modules?如果 webpack 摇树处理 node_modules?
【发布时间】:2017-09-24 10:10:52
【问题描述】:

我正在处理 node@6.11.0、webpack@3.4.1

文件.js

export function foo () {
  return 'foo'
}

export function bar() {
  return 'bar'
}

main.js

import { foo } from './file'
import { log } from 'mathjs'
foo()
log(10000,10)

而且 bundle.js 包含了 math.js 的所有方法,所以我想知道 tree-shaking 是否有效。 并且功能栏签有/* unused harmony export bar */ 当我使用 tree-shaking 时,bundlejs 应该只包含 foo 和 lod 方法,不是吗? git clone https://github.com/z2014/All-test-demo,然后测试

【问题讨论】:

  • 你有什么问题?
  • 而且 bundle.js 包含了 math.js 的所有方法,所以我想知道 tree-shaking 是否有效。
  • 请更新问题并提供更多详细信息

标签: javascript webpack rollupjs tree-shaking


【解决方案1】:

未使用的代码被缩小器(例如 UglifyJS)删除。 Tree-shaking 只是让 minifier 可以删除它。

因此,在您的情况下,启用 UglifyJS 很可能会解决问题。

您可以阅读有关此行为的更多信息 https://webpack.js.org/guides/tree-shakinghttps://github.com/webpack/webpack/tree/master/examples/harmony-unusedhttps://github.com/webpack/webpack/issues/2866

【讨论】:

  • 但是当我使用 UglifyJS 插件时,我得到了 1571 KIB,当我不使用 tree-shaking 时,它也得到了 1573 KIB,所以我想知道 tree-shaking 是否有效
  • 我不知道你的问题,因为我这里没有代码,但我认为你可以尝试在你的构建中找到你未使用的代码。 PS:记得使用标志 -p 运行 webpack 以进行生产构建。
  • 还有一个问题:您想从构建中删除什么功能?摇树只适用于 es 模块而不是普通的 commonjs 包(你通过 npm 安装的包)。我看到你使用babel-preset-es2015,它会将所有的 es 模块转换为普通的 commonjs,所以 tree-shaking 不起作用
  • 我用它来和presets: [['es2015', {modules:false}], 'stage-3', 'react']比较
  • 预设 es2015 没有选项 modules: false。你应该是我的新先生
猜你喜欢
  • 2016-12-28
  • 2016-11-17
  • 2019-12-29
  • 2016-11-12
  • 2017-05-23
  • 2019-04-24
  • 2018-08-30
  • 2019-05-08
  • 2023-03-13
相关资源
最近更新 更多