[Gradle, JS] jsJar dependsOn PublicPackageJsonTask
But package.json included into jar only if public npm dependencies exists
This commit is contained in:
+4
@@ -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:"
|
||||
+2
-15
@@ -43,11 +43,8 @@ constructor(
|
||||
private val realExternalDependencies: Collection<NpmDependency>
|
||||
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"
|
||||
}
|
||||
|
||||
+13
-2
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user