From f76a1f0e86e0193e1578ef0fd30c47f32563df93 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Fri, 3 Jul 2020 13:56:37 +0300 Subject: [PATCH] [Gradle, JS] jsJar dependsOn PublicPackageJsonTask But package.json included into jar only if public npm dependencies exists --- .../gradle/targets/js/npm/NpmDependency.kt | 4 ++++ .../targets/js/npm/PublicPackageJsonTask.kt | 17 ++--------------- .../resolver/KotlinCompilationNpmResolver.kt | 15 +++++++++++++-- 3 files changed, 19 insertions(+), 17 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmDependency.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmDependency.kt index f11933c5fd8..2a73d09389f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmDependency.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmDependency.kt @@ -16,6 +16,7 @@ import org.gradle.api.internal.artifacts.dependencies.SelfResolvingDependencyInt import org.gradle.api.tasks.TaskDependency import org.gradle.internal.component.local.model.DefaultLibraryBinaryIdentifier import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin +import org.jetbrains.kotlin.gradle.targets.js.npm.NpmDependency.Scope.DEV import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProject.Companion.PACKAGE_JSON import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinCompilationNpmResolution import java.io.File @@ -157,4 +158,7 @@ internal fun moduleName(directory: File): String { return directory.name } +fun NpmDependency.isPublicDependency(): Boolean = + scope != DEV + const val FILE_VERSION_PREFIX = "file:" \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PublicPackageJsonTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PublicPackageJsonTask.kt index d4ff7063e05..9be87af3e63 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PublicPackageJsonTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PublicPackageJsonTask.kt @@ -43,11 +43,8 @@ constructor( private val realExternalDependencies: Collection get() = compilationResolution.externalNpmDependencies - @Input - var skipOnEmptyNpmDependencies: Boolean = false - @get:OutputFile - var packageJson: File by property { + var packageJsonFile: File by property { project.buildDir .resolve("tmp") .resolve(npmProject.publicPackageJsonTaskName) @@ -57,9 +54,6 @@ constructor( @TaskAction fun resolve() { packageJson(npmProject, realExternalDependencies).let { packageJson -> - if (skipOnEmptyNpmDependencies && packageJson.skipRequired()) { - return - } packageJson.apply { listOf( @@ -71,7 +65,7 @@ constructor( packageJson.devDependencies.clear() - packageJson.saveTo(this@PublicPackageJsonTask.packageJson) + packageJson.saveTo(this@PublicPackageJsonTask.packageJsonFile) } } @@ -89,13 +83,6 @@ constructor( } } - private fun PackageJson.skipRequired() = - dependencies.isEmpty() && - peerDependencies.isEmpty() && - optionalDependencies.isEmpty() && - optionalDependencies.isEmpty() && - bundledDependencies.isEmpty() - companion object { const val NAME = "publicPackageJson" } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt index f934a4f3e80..a78fd1c513f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt @@ -56,7 +56,6 @@ internal class KotlinCompilationNpmResolver( npmProject.publicPackageJsonTaskName, listOf(compilation) ) { - it.skipOnEmptyNpmDependencies = true it.dependsOn(nodeJs.npmInstallTaskProvider) it.dependsOn(packageJsonTaskHolder) }.also { packageJsonTask -> @@ -65,7 +64,7 @@ internal class KotlinCompilationNpmResolver( .withType(Zip::class.java) .named(npmProject.target.artifactsTaskName) .configure { - it.from(packageJsonTask) + it.dependsOn(packageJsonTask) } } } @@ -180,6 +179,18 @@ internal class KotlinCompilationNpmResolver( internalDependencies.add(projectResolver[main]) } + val hasPublicNpmDependencies = externalNpmDependencies + .any { it.isPublicDependency() } + + if (compilation.isMain() && hasPublicNpmDependencies) { + project.tasks + .withType(Zip::class.java) + .named(npmProject.target.artifactsTaskName) + .configure { task -> + task.from(publicPackageJsonTaskHolder) + } + } + plugins.forEach { it.hookDependencies( internalDependencies,