我按照本教程创建了一个kotlin-> js项目:https://kotlinlang.org/docs/tutorials/javascript/getting-started-gradle/getting-started-with-gradle.html
接下来,我按照以下说明在代码中使用协程:https://github.com/kotlin/kotlinx.coroutines/blob/master/README.md#using-in-your-projects
到目前为止一切都很好,代码中没有错误标记,我可以构建我的js应用程序而没有任何错误消息。但是,我的js脚本未在浏览器中运行,并且在浏览器控制台中收到了上述错误消息。 你们中的任何人都知道我错过了什么或配置错误吗?
这是我的build.gradle
group 'de.berlin'
version '1.0-SNAPSHOT'
buildscript {
ext.kotlin_version = '1.3.31'
repositories {
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
apply plugin: 'kotlin2js'
repositories {
mavenCentral()
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib-js:$kotlin_version"
testCompile "org.jetbrains.kotlin:kotlin-test-js:$kotlin_version"
compile "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.0-M1"
compile("org.jetbrains.kotlinx:kotlinx-coroutines-core-common:1.3.0-M1")
compile "org.jetbrains.kotlinx:kotlinx-coroutines-core-js:1.3.0-M1"
}
compileKotlin2Js.kotlinOptions.sourceMap = true
compileKotlin2Js.kotlinOptions.outputFile = "${projectDir}/web/js/myApp.js"
compileKotlin2Js.kotlinOptions.suppressWarnings = false
compileKotlin2Js.kotlinOptions.verbose = true
build.doLast {
configurations.compile.each { File file ->
copy {
includeEmptyDirs = false
from zipTree(file.absolutePath)
into "${projectDir}/web/js/lib"
include { fileTreeElement ->
def path = fileTreeElement.path
path.endsWith(".js") && (path.startsWith("META-INF/resources/") || !path.startsWith("META-INF/"))
}
}
}
copy {
includeEmptyDirs = false
from "${buildDir}/resources/main"
into "${projectDir}/web"
}
}
clean.doFirst {
delete "${projectDir}/web"
}
所有内容编译都没有任何错误消息,但是我在浏览器控制台中收到以下错误消息: “”未找到其依赖项“ kotlinx-coroutines-core”。请检查“(项目名称)”之前是否已加载“ kotlinx-coroutines-core”。”
更详细的检查表明/ web / js / lib仅包含kotlin.js,不应同时存在kotlinx-coroutines-core,因为它是依赖模块的一部分,应该在build.doLast步骤中复制? 我还注意到,已编译的js文件包含以下内容:
if (typeof kotlin === 'undefined') {
throw new Error("Error loading module 'myApp'. Its dependency 'kotlin' was not found. Please, check whether 'kotlin' is loaded prior to 'myApp'.");
}
if (typeof this['kotlinx-coroutines-core'] === 'undefined') {
throw new Error("Error loading module 'myApp'. Its dependency 'kotlinx-coroutines-core' was not found. Please, check whether 'kotlinx-coroutines-core' is loaded prior to 'myApp'.");
}
为什么是这个['kotlinx-coroutines-core'],而不是kotlinx-coroutines-core(如上一行)?
答案 0 :(得分:0)
为什么是这个['kotlinx-coroutines-core'],而不是kotlinx-coroutines-core(如上一行)?
因为“ kotlinx-coroutines-core”不是有效的JS标识符。
“ this ['kotlinx-coroutines-core']”正在测试模块“ kotlinx-coroutines-core”是否已加载。
如果未定义,则表示您尚未在执行代码之前“加载”模块。
根据加载JS模块的方式,您将需要“ require(....)”或具有对“ kotlinx-coroutines-core”模块的html脚本引用
答案 1 :(得分:0)
开帖已经一年半多了,但我还是回答一下,以防将来有人遇到同样的问题。
您必须从 npm 下载“kotlinx-coroutines-core”。 Coroutines JS - install