Kotlin js:不同模块输出不同的js文件
Kotlin js: different output js files for different modules
如果我在项目中有两个不同的 kotlin js 模块,我可以为每个模块创建两个不同的输出 js 文件吗?如果是,如何配置?
jsMain {
dependencies {
implementation npm ("text-encoding", "0.7.0")
implementation npm ("bufferutil", "4.0.1")
implementation npm ("utf-8-validate", "5.0.2")
implementation npm ("abort-controller", "3.0.0")
implementation npm ("fs", "0.0.1-security")
implementation kotlin('stdlib-js')
implementation "io.ktor:ktor-client-json-js:$ktor_version"
implementation "io.ktor:ktor-client-js:$ktor_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-js:1.3.8"
implementation "io.ktor:ktor-client-serialization-js:$ktor_version"
implementation "pl.treksoft:kvision:$kvisionVersion"
implementation "pl.treksoft:kvision-i18n:$kvisionVersion"
}
}
jsSecure {
dependencies {
implementation npm ("text-encoding", "0.7.0")
implementation npm ("bufferutil", "4.0.1")
implementation npm ("utf-8-validate", "5.0.2")
implementation npm ("abort-controller", "3.0.0")
implementation npm ("fs", "0.0.1-security")
implementation kotlin('stdlib-js')
implementation "io.ktor:ktor-client-json-js:$ktor_version"
implementation "io.ktor:ktor-client-js:$ktor_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-js:1.3.8"
implementation "io.ktor:ktor-client-serialization-js:$ktor_version"
implementation "pl.treksoft:kvision:$kvisionVersion"
implementation "pl.treksoft:kvision-i18n:$kvisionVersion"
}
}
首先,您可以为这种情况创建单独的 Gradle 模块。这将是最好的方式,因为它不是内部的API,并且您可以定义模块之间的依赖关系。
所以只需创建新的 Gradle 模块并像往常一样配置它。
它作为单独的输出文件提供完整的体验,包括单独的输出文件 (https://kotlinlang.org/docs/reference/js-project-setup.html)
使用内部 API,您可以在一个 Gradle 模块但多个 JS 目标中工作。创建单独的模块非常相似。它还为编译提供单独的输出文件。
例如
kotlin {
js {
// ...
}
js("secure") {
// ...
}
}
最后,您可以在一个模块和一个 Kotlin/JS 目标中创建单独的编译。但是这个API不稳定
kotlin {
js {
// ...
val secure = compilations.create("secure")
secure.source(sourceSets["jsMain"]
}
}
例如,此 API 不为您的自定义编译提供 Webpack 和其他集成内容。但是它提供了单独的编译输出文件。
所以我建议创建新的 Gradle 模块,因为它更健壮。如果有任何原因导致这种方式对您不起作用,请告诉。
如果我在项目中有两个不同的 kotlin js 模块,我可以为每个模块创建两个不同的输出 js 文件吗?如果是,如何配置?
jsMain {
dependencies {
implementation npm ("text-encoding", "0.7.0")
implementation npm ("bufferutil", "4.0.1")
implementation npm ("utf-8-validate", "5.0.2")
implementation npm ("abort-controller", "3.0.0")
implementation npm ("fs", "0.0.1-security")
implementation kotlin('stdlib-js')
implementation "io.ktor:ktor-client-json-js:$ktor_version"
implementation "io.ktor:ktor-client-js:$ktor_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-js:1.3.8"
implementation "io.ktor:ktor-client-serialization-js:$ktor_version"
implementation "pl.treksoft:kvision:$kvisionVersion"
implementation "pl.treksoft:kvision-i18n:$kvisionVersion"
}
}
jsSecure {
dependencies {
implementation npm ("text-encoding", "0.7.0")
implementation npm ("bufferutil", "4.0.1")
implementation npm ("utf-8-validate", "5.0.2")
implementation npm ("abort-controller", "3.0.0")
implementation npm ("fs", "0.0.1-security")
implementation kotlin('stdlib-js')
implementation "io.ktor:ktor-client-json-js:$ktor_version"
implementation "io.ktor:ktor-client-js:$ktor_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-js:1.3.8"
implementation "io.ktor:ktor-client-serialization-js:$ktor_version"
implementation "pl.treksoft:kvision:$kvisionVersion"
implementation "pl.treksoft:kvision-i18n:$kvisionVersion"
}
}
首先,您可以为这种情况创建单独的 Gradle 模块。这将是最好的方式,因为它不是内部的API,并且您可以定义模块之间的依赖关系。 所以只需创建新的 Gradle 模块并像往常一样配置它。 它作为单独的输出文件提供完整的体验,包括单独的输出文件 (https://kotlinlang.org/docs/reference/js-project-setup.html)
使用内部 API,您可以在一个 Gradle 模块但多个 JS 目标中工作。创建单独的模块非常相似。它还为编译提供单独的输出文件。 例如
kotlin {
js {
// ...
}
js("secure") {
// ...
}
}
最后,您可以在一个模块和一个 Kotlin/JS 目标中创建单独的编译。但是这个API不稳定
kotlin {
js {
// ...
val secure = compilations.create("secure")
secure.source(sourceSets["jsMain"]
}
}
例如,此 API 不为您的自定义编译提供 Webpack 和其他集成内容。但是它提供了单独的编译输出文件。
所以我建议创建新的 Gradle 模块,因为它更健壮。如果有任何原因导致这种方式对您不起作用,请告诉。