[K/JS] Add .mjs extension to main file in package.json for ES modules compilation
This commit is contained in:
+55
@@ -624,6 +624,61 @@ class Kotlin2JsIrGradlePluginIT : KGPBaseTest() {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@DisplayName("package json contains correct extension for ES-modules")
|
||||
@GradleTest
|
||||
fun testPackageJsonWithEsModules(gradleVersion: GradleVersion) {
|
||||
project("kotlin-js-browser-project", gradleVersion) {
|
||||
buildGradleKts.modify(::transformBuildScriptWithPluginsDsl)
|
||||
subProject("app").buildGradleKts.modify {
|
||||
it + """
|
||||
|
|
||||
|kotlin.target.useEsModules()
|
||||
|
|
||||
""".trimMargin()
|
||||
}
|
||||
|
||||
build(":app:packageJson") {
|
||||
val packageJson = projectPath
|
||||
.resolve("build/js/packages/kotlin-js-browser-app")
|
||||
.resolve(NpmProject.PACKAGE_JSON)
|
||||
.let {
|
||||
Gson().fromJson(it.readText(), PackageJson::class.java)
|
||||
}
|
||||
|
||||
assertEquals(packageJson.main, "kotlin/kotlin-js-browser-app.mjs")
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@DisplayName("public package json contains correct extension for ES-modules")
|
||||
@GradleTest
|
||||
fun testPublicPackageJsonWithEsModules(gradleVersion: GradleVersion) {
|
||||
project("kotlin-js-browser-project", gradleVersion) {
|
||||
buildGradleKts.modify(::transformBuildScriptWithPluginsDsl)
|
||||
subProject("app").buildGradleKts.modify {
|
||||
it + """
|
||||
|
|
||||
|kotlin.target.useEsModules()
|
||||
|
|
||||
""".trimMargin()
|
||||
}
|
||||
|
||||
build(":app:publicPackageJson") {
|
||||
val packageJson = subProject("app").projectPath
|
||||
.resolve("build/tmp/publicPackageJson")
|
||||
.resolve(NpmProject.PACKAGE_JSON)
|
||||
.let {
|
||||
Gson().fromJson(it.readText(), PackageJson::class.java)
|
||||
}
|
||||
|
||||
assertEquals(packageJson.main, "kotlin-js-browser-app.mjs")
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@DisplayName("Multiple targets works without clash")
|
||||
@GradleTest
|
||||
fun testMultipleJsTargets(gradleVersion: GradleVersion) {
|
||||
|
||||
+7
-1
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.gradle.targets.js.npm
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.process.ExecSpec
|
||||
import org.jetbrains.kotlin.gradle.dsl.JsModuleKind
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
||||
@@ -31,7 +32,12 @@ val KotlinJsCompilation.npmProject: NpmProject
|
||||
open class NpmProject(@Transient val compilation: KotlinJsCompilation) : Serializable {
|
||||
val compilationName = compilation.disambiguatedName
|
||||
|
||||
private val extension = if (compilation.platformType == KotlinPlatformType.wasm) ".mjs" else ".js"
|
||||
private val extension by lazy {
|
||||
if (
|
||||
compilation.platformType == KotlinPlatformType.wasm ||
|
||||
compilation.kotlinOptions.moduleKind == JsModuleKind.MODULE_ES.kind
|
||||
) ".mjs" else ".js"
|
||||
}
|
||||
|
||||
val name: String by lazy {
|
||||
buildNpmProjectName()
|
||||
|
||||
+5
-1
@@ -36,6 +36,9 @@ abstract class PublicPackageJsonTask :
|
||||
@get:Input
|
||||
abstract val jsIrCompilation: Property<Boolean>
|
||||
|
||||
@get:Input
|
||||
abstract val esModules: Property<Boolean>
|
||||
|
||||
@get:Input
|
||||
abstract val npmProjectName: Property<String>
|
||||
|
||||
@@ -85,7 +88,8 @@ abstract class PublicPackageJsonTask :
|
||||
externalDependencies,
|
||||
packageJsonHandlers.get()
|
||||
).let { packageJson ->
|
||||
packageJson.main = "${npmProjectName.get()}.js"
|
||||
val extension = if (esModules.get()) "mjs" else "js"
|
||||
packageJson.main = "${npmProjectName.get()}.$extension"
|
||||
|
||||
if (jsIrCompilation.get()) {
|
||||
packageJson.types = "${npmProjectName.get()}.d.ts"
|
||||
|
||||
+2
@@ -16,6 +16,7 @@ import org.gradle.api.attributes.Usage
|
||||
import org.gradle.api.internal.artifacts.DefaultProjectComponentIdentifier
|
||||
import org.gradle.api.tasks.TaskProvider
|
||||
import org.gradle.api.tasks.bundling.Zip
|
||||
import org.jetbrains.kotlin.gradle.dsl.JsModuleKind
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.categoryByName
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
||||
@@ -80,6 +81,7 @@ class KotlinCompilationNpmResolver(
|
||||
it.jsIrCompilation.set(compilation is KotlinJsIrCompilation)
|
||||
it.npmProjectName.set(npmProject.name)
|
||||
it.npmProjectMain.set(npmProject.main)
|
||||
it.esModules.set(compilation.compilerOptions.options.moduleKind.get() == JsModuleKind.MODULE_ES)
|
||||
}.also { packageJsonTask ->
|
||||
project.dependencies.attributesSchema {
|
||||
it.attribute(publicPackageJsonAttribute)
|
||||
|
||||
Reference in New Issue
Block a user