是否可以使用Google闭包编译器来进一步缩小Kotlin JS代码,而不是Webpack提供的?如果可以,怎么做呢?
首先,你应该声明一个NPM依赖于闭包编译器(最新版本):
dependencies {
implementation(devNpm("google-closure-compiler", "20210808.0.0"))
}
然后,创建一个将在webpack缩小后运行的任务:
tasks.create<Exec>("compileWithClosure") {
// browserProductionWebpack: production minified version by Webpack
// kotlinNodeJsSetup: needed to execute Node scripts (':' because it is on the root project)
dependsOn("browserProductionWebpack", ":kotlinNodeJsSetup")
// Get the Node installation directory
val kotlinNodeJsSetup = rootProject.tasks["kotlinNodeJsSetup"] as org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsSetupTask
workingDir = File(kotlinNodeJsSetup.destination, "bin")
// Execute the script
commandLine(
"node",
"${File(rootProject.buildDir, "js/node_modules/google-closure-compiler/cli.js")}",
"--js=${File(buildDir, "distributions/<your module name here>.js")}",
"--js_output_file=${File(buildDir, "distributions/optimized.js")}",
"-O=SIMPLE",
"--env=BROWSER",
"--warning_level=QUIET",
)
}
参数的完整列表:
-O=ADVANCED
似乎打破了Kotlin生成的文件(至少在我的情况下Kotlin JS 1.5.21 IR)-O=SIMPLE
从二进制文件中删除~600kB (2.1MB→1.5MB),使用Kotlin React, KotlinX。序列化,Ktor)--warning_level=QUIET
因为我们正在传递一个已经缩小的文件,控制台输出是完全不可读的,并且实际上减慢了编译