自版本 1.1.4 起,Kotlin/JS 包含了一个无用代码消除(DCE,dead code elimination)工具。 该工具允许在生成的 JS 中删除未使用的属性、函数和类。 出现未使用的声明有这几种可能情况:
kotlin.js
无用代码消除通常也称为“tree shaking”。
DCE 工具目前对 Gradle 可用。
要激活 DCE 工具,请将以下这行添加到 build.gradle 中:
build.gradle
apply plugin: 'kotlin-dce-js'
请注意,如果你正在使用多项目构建,那么应该将插件应用在作为应用程序入口点的主项目。
默认情况下,可以在路径 $BUILD_DIR/min/ 中找到生成的一组 JavaScript文件(你的应用程序与所有依赖关系),其中 $BUILD_DIR 是生成 JavaScript 的路径(通常是 build/classes/main)。
$BUILD_DIR/min/
$BUILD_DIR
build/classes/main
要在主源集上配置 DCE,可以使用 runDceKotlinJs 任务(以及用于其他源集对应的 runDce<sourceSetName>KotlinJs)。
runDceKotlinJs
runDce<sourceSetName>KotlinJs
有时你直接在 JavaScript 中使用一个 Kotlin 声明,而被 DCE 给去除掉了。 你可能想保留这个声明。 为此,你可以在 build.gradle 中使用以下语法:
runDceKotlinJs.keep "declarationToKeep"[, "declarationToKeep", ...]
其中 declarationToKeep 具有以下语法:
declarationToKeep
moduleName.dot.separated.package.name.declarationName
例如,考虑一个模块命名为 kotlin-js-example,它在 org.jetbrains.kotlin.examples 包中包含一个名为 toKeep 的函数。使用以下这行:
kotlin-js-example
org.jetbrains.kotlin.examples
toKeep
runDceKotlinJs.keep "kotlin-js-example_main.org.jetbrains.kotlin.examples.toKeep"
请注意,如果函数具有参数,它的名称会被修饰,因此在 keep 指令中应该使用修饰后的名称。
运行 DCE 在每次构建时会额外花费一些时间,而且输出大小在开发过程中无关紧要。可以通过 DCE 任务的 dceOptions.devMode 标志使 DCE 工具跳过实际的无效代码消除从而缩短开发构建时间。
dceOptions.devMode
例如,如需根据自定义条件禁用 main 源集的 DCE 并且总是禁用 test 代码的 DCE,请将下述几行添加到构建脚本中:
main
test
runDceKotlinJs.dceOptions.devMode = isDevMode runDceTestKotlinJs.dceOptions.devMode = true
显示如何将 Kotlin 与 DCE 及 webpack 集成并得到一个小的捆绑的完整示例, 可以在这里找到。
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8