georgi
09/20/2022, 7:24 AMimplementation
currently the same as api
on KotlinJS using the IR compiler?
Documentation says standard gradle dependency declarations are supported.
Example: I have 3 modules with the following dependency graph: appJs
-> modulea
-> moduleb
, where I use implementation
for linking between the modules. So modulea
declares implementation(project(":moduleb"))
. However, I can still access code within mobuleb
from appJs
which means that it's being leaked.georgi
09/20/2022, 7:25 AMbuild.gradle.kts
files for reference in the thread.georgi
09/20/2022, 7:26 AMappJs
plugins {
kotlin("js") version "1.7.20-RC"
}
kotlin {
js(IR) {
binaries.executable()
nodejs()
}
sourceSets {
val main by getting {
dependencies {
implementation(project(":modulea"))
}
}
}
}
dependencies {
testImplementation(kotlin("test"))
}
georgi
09/20/2022, 7:27 AMplugins {
kotlin("js") version "1.7.20-RC"
}
kotlin {
js(IR) {
nodejs()
}
sourceSets {
val main by getting {
dependencies {
implementation(project(":moduleb"))
}
}
}
}
dependencies {
testImplementation(kotlin("test"))
}
georgi
09/20/2022, 7:27 AMmoduleb
plugins {
kotlin("js") version "1.7.20-RC"
}
kotlin {
js(IR) {
nodejs()
}
}
dependencies {
testImplementation(kotlin("test"))
}
georgi
09/20/2022, 8:51 AMproject(:modulea)
dependency is a special form of an execution dependency, where we're essentially saying that we want to depend on the output of modulea
which in turn depends on the output of moduleb
. Therefore all compiled classes will be added both to the runtime
and compiletime
classpath of appJs
, which makes sense.
I will try to add an external dependency as implementation
to moduleb
and see if it's leaking. I expect it shouldn't...georgi
09/20/2022, 5:28 PMgeorgi
09/21/2022, 8:28 AMThe situation around Kotlin/Native is a bit different than around the JVM world. Kotlin/Native doesn't supportorcompileOnly
dependencies.runtimeOnly
It is required to pass all transitive dependencies in order to compile code even if it doesn't use symbols from some of them. This is known limitation of Kotlin/Native compiler. Theoretically the example above should be able to compile and Kotlin/Native team will be working on supporting cases like this at some point of time.(Thought I'd share in case anyone stumbles across this in the future)