未引用的默认参数是否会被 webpack 自动摇出树?

Bil*_*rry 6 javascript webpack tree-shaking

如果之前有人问过这个问题,我必须道歉,但我无法在网上或在与 tree shake 相关的 webpack 文档中找到答案。

树摇动如何使用默认参数进行工作?对于上下文:我特别关心 tree-shaking 的 webpack 实现如何处理默认参数。

给出以下假设的应用程序结构:

/
|_ dependency/
| |
| |_ dependency.js
| |_ moderatelyLargeFile.js
|
|
|_src/
  |
  |_ application.js
  |_ someSmallFile.js
Run Code Online (Sandbox Code Playgroud)

以及每个文件中的以下代码:

dependency.js

import moderatelyLargeFile from './moderatelyLargeFile.js';
import { someParsingFunction1, someParsingFunction2 } from 'somewhere-else-dependency';

export default function parseSomeFile(file = moderatelylargeFile) {
  let parsedResult = { ...someParsingFunction1(file), ...someParsingFunction2(file) };
  return parsedResult;
}
Run Code Online (Sandbox Code Playgroud)

application.js

import parseSomeFile from './dependency/dependency.js';
import someSmallFile from './someSmallFile.js'
let result = parseSomeFile(someSmallFile);
// Do other application stuff with result
Run Code Online (Sandbox Code Playgroud)

moderatelyLargeFile.js被捆绑到 webpack 构建中吗application.js?webpack 是否足够聪明,知道默认参数永远不会被引用,因为单次调用提供了该参数?或者是否moderatelyLargeFile.js总是被捆绑在一起,因为它是函数定义的一部分?

Jas*_*ner 1

截至 2022 年 4 月,没有 \xe2\x80\x93,目前任何已知的捆绑程序都不支持消除未使用的默认参数的死代码。

\n

我将主要捆绑器的示例放在一起,它测试了各种捆绑器如何处理Libauth WebAssembly 加密实现的树摇动/死代码消除。(这是一个很好的现实示例,其中某些捆绑包可以节省数百KB。)

\n

我还为我熟悉的捆绑程序提出了问题:

\n\n

当各种捆绑程序添加支持时,我将尝试更新此答案。该仓库还有一张桌子

\n