JavaScript 无用代码消除(DCE)

    在以下情况下会出现未使用的声明:

    • 函数是内联的,永远不会直接调用(除了少数情况总是发生)。
    • 模块使用共享库。没有 DCE 的情况下,未使用的组件仍会进入结果包。 例如,Kotlin 标准库中包含用于操作列表、数组、字符序列、DOM 适配器的函数。 All of this functionality would require about 1.3 MB as a JavaScript file. 一个简单的 “Hello, world” 应用程序仅需要控制台例程,整个程序只有几 KB。

    Kotlin/JS Gradle 插件在构建生产包时会自动处理 DCE,例如:使用 任务。开发包任务(例如 browserDevelopmentWebpack)不包含 DCE。

    为了避免某些声明被删除,请将 dceTask 代码块添加到 Gradle 构建脚本中,并将这些声明列为 keep 函数的参数。 参数必须是声明的完整限定名,并且模块名称为前缀: moduleName.dot.separated.package.name.declarationName

    Keeping whole packages or modules from elimination can prevent DCE from removing many unused declarations. Because of this, it is preferable to select individual declarations which should be excluded from DCE one by one.

    Disabling DCE

    To turn off DCE completely, use the option in the dceTask:

    1. js {
    2. browser {
    3. dceTask {
    4. }
    5. binaries.executable()
    6. }
    7. }