[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")
|
@DisplayName("Multiple targets works without clash")
|
||||||
@GradleTest
|
@GradleTest
|
||||||
fun testMultipleJsTargets(gradleVersion: GradleVersion) {
|
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.api.Project
|
||||||
import org.gradle.process.ExecSpec
|
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.KotlinCompilation
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
||||||
@@ -31,7 +32,12 @@ val KotlinJsCompilation.npmProject: NpmProject
|
|||||||
open class NpmProject(@Transient val compilation: KotlinJsCompilation) : Serializable {
|
open class NpmProject(@Transient val compilation: KotlinJsCompilation) : Serializable {
|
||||||
val compilationName = compilation.disambiguatedName
|
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 {
|
val name: String by lazy {
|
||||||
buildNpmProjectName()
|
buildNpmProjectName()
|
||||||
|
|||||||
+5
-1
@@ -36,6 +36,9 @@ abstract class PublicPackageJsonTask :
|
|||||||
@get:Input
|
@get:Input
|
||||||
abstract val jsIrCompilation: Property<Boolean>
|
abstract val jsIrCompilation: Property<Boolean>
|
||||||
|
|
||||||
|
@get:Input
|
||||||
|
abstract val esModules: Property<Boolean>
|
||||||
|
|
||||||
@get:Input
|
@get:Input
|
||||||
abstract val npmProjectName: Property<String>
|
abstract val npmProjectName: Property<String>
|
||||||
|
|
||||||
@@ -85,7 +88,8 @@ abstract class PublicPackageJsonTask :
|
|||||||
externalDependencies,
|
externalDependencies,
|
||||||
packageJsonHandlers.get()
|
packageJsonHandlers.get()
|
||||||
).let { packageJson ->
|
).let { packageJson ->
|
||||||
packageJson.main = "${npmProjectName.get()}.js"
|
val extension = if (esModules.get()) "mjs" else "js"
|
||||||
|
packageJson.main = "${npmProjectName.get()}.$extension"
|
||||||
|
|
||||||
if (jsIrCompilation.get()) {
|
if (jsIrCompilation.get()) {
|
||||||
packageJson.types = "${npmProjectName.get()}.d.ts"
|
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.internal.artifacts.DefaultProjectComponentIdentifier
|
||||||
import org.gradle.api.tasks.TaskProvider
|
import org.gradle.api.tasks.TaskProvider
|
||||||
import org.gradle.api.tasks.bundling.Zip
|
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.KotlinCompilation
|
||||||
import org.jetbrains.kotlin.gradle.plugin.categoryByName
|
import org.jetbrains.kotlin.gradle.plugin.categoryByName
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
||||||
@@ -80,6 +81,7 @@ class KotlinCompilationNpmResolver(
|
|||||||
it.jsIrCompilation.set(compilation is KotlinJsIrCompilation)
|
it.jsIrCompilation.set(compilation is KotlinJsIrCompilation)
|
||||||
it.npmProjectName.set(npmProject.name)
|
it.npmProjectName.set(npmProject.name)
|
||||||
it.npmProjectMain.set(npmProject.main)
|
it.npmProjectMain.set(npmProject.main)
|
||||||
|
it.esModules.set(compilation.compilerOptions.options.moduleKind.get() == JsModuleKind.MODULE_ES)
|
||||||
}.also { packageJsonTask ->
|
}.also { packageJsonTask ->
|
||||||
project.dependencies.attributesSchema {
|
project.dependencies.attributesSchema {
|
||||||
it.attribute(publicPackageJsonAttribute)
|
it.attribute(publicPackageJsonAttribute)
|
||||||
|
|||||||
Reference in New Issue
Block a user