Kotlin多平台执行jsRun任务报cli.isMultipleCompiler不存在错误
问题根因
执行jsRun任务抛出TypeError: cli.isMultipleCompiler is not a function错误,是Kotlin/JS Gradle插件默认绑定的webpack-cli 4.9.0版本的已知Bug:该版本webpack-cli与配套的@webpack-cli/serve插件API不兼容,缺失isMultipleCompiler方法,问题仅触发于webpack dev server启动环节,因此普通编译、Ktor后端服务运行都不会受影响。
解决步骤
Kotlin/JS构建体系原生支持自定义webpack相关npm依赖版本,不要手动修改build/js目录下自动生成的package.json(该文件每次构建都会被覆盖,修改无效),按以下步骤操作即可:
- 打开项目根目录下的Gradle配置文件,在JS目标的配置块中添加版本强制指定规则,将
webpack-cli版本锁定为修复了该Bug的4.10.0版本:
如果使用Kotlin DSL(build.gradle.kts),配置如下:
如果使用Groovy DSL(kotlin { js(IR) { // 保留原有的browser、二进制产物输出等配置,无需改动 browser { // 保留原有的webpack自定义配置 } // 添加以下版本指定配置 node { versions.webpackCli.version = "4.10.0" } } }build.gradle),配置如下:kotlin { js(IR) { // 保留原有的browser、二进制产物输出等配置,无需改动 browser { // 保留原有的webpack自定义配置 } // 添加以下版本指定配置 node { versions.webpackCli.version = "4.10.0" } } } - 执行清理命令清除旧构建缓存和残留依赖:
Linux/macOS系统执行:
Windows系统执行:./gradlew cleangradlew.bat clean - 重新执行
jsRun任务,即可正常启动webpack dev server。
注:如果后续遇到其他webpack生态依赖的版本兼容问题,也可以通过相同的
node.versions配置块指定对应依赖版本,支持配置的项包括webpack、webpack-cli、webpack-dev-server等Kotlin/JS默认集成的npm构建依赖,不要跨大版本升级(比如直接升到webpack-cli 5.x),否则会和Kotlin Gradle插件内置的webpack配置逻辑产生新的兼容问题。
内容的提问来源于stack exchange,提问作者Jordi
相关产品推荐
相关产品推荐

