[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.api.tasks.TaskDependency
|
||||||
import org.gradle.internal.component.local.model.DefaultLibraryBinaryIdentifier
|
import org.gradle.internal.component.local.model.DefaultLibraryBinaryIdentifier
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
|
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.NpmProject.Companion.PACKAGE_JSON
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinCompilationNpmResolution
|
import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinCompilationNpmResolution
|
||||||
import java.io.File
|
import java.io.File
|
||||||
@@ -157,4 +158,7 @@ internal fun moduleName(directory: File): String {
|
|||||||
return directory.name
|
return directory.name
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun NpmDependency.isPublicDependency(): Boolean =
|
||||||
|
scope != DEV
|
||||||
|
|
||||||
const val FILE_VERSION_PREFIX = "file:"
|
const val FILE_VERSION_PREFIX = "file:"
|
||||||
+2
-15
@@ -43,11 +43,8 @@ constructor(
|
|||||||
private val realExternalDependencies: Collection<NpmDependency>
|
private val realExternalDependencies: Collection<NpmDependency>
|
||||||
get() = compilationResolution.externalNpmDependencies
|
get() = compilationResolution.externalNpmDependencies
|
||||||
|
|
||||||
@Input
|
|
||||||
var skipOnEmptyNpmDependencies: Boolean = false
|
|
||||||
|
|
||||||
@get:OutputFile
|
@get:OutputFile
|
||||||
var packageJson: File by property {
|
var packageJsonFile: File by property {
|
||||||
project.buildDir
|
project.buildDir
|
||||||
.resolve("tmp")
|
.resolve("tmp")
|
||||||
.resolve(npmProject.publicPackageJsonTaskName)
|
.resolve(npmProject.publicPackageJsonTaskName)
|
||||||
@@ -57,9 +54,6 @@ constructor(
|
|||||||
@TaskAction
|
@TaskAction
|
||||||
fun resolve() {
|
fun resolve() {
|
||||||
packageJson(npmProject, realExternalDependencies).let { packageJson ->
|
packageJson(npmProject, realExternalDependencies).let { packageJson ->
|
||||||
if (skipOnEmptyNpmDependencies && packageJson.skipRequired()) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
packageJson.apply {
|
packageJson.apply {
|
||||||
listOf(
|
listOf(
|
||||||
@@ -71,7 +65,7 @@ constructor(
|
|||||||
|
|
||||||
packageJson.devDependencies.clear()
|
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 {
|
companion object {
|
||||||
const val NAME = "publicPackageJson"
|
const val NAME = "publicPackageJson"
|
||||||
}
|
}
|
||||||
|
|||||||
+13
-2
@@ -56,7 +56,6 @@ internal class KotlinCompilationNpmResolver(
|
|||||||
npmProject.publicPackageJsonTaskName,
|
npmProject.publicPackageJsonTaskName,
|
||||||
listOf(compilation)
|
listOf(compilation)
|
||||||
) {
|
) {
|
||||||
it.skipOnEmptyNpmDependencies = true
|
|
||||||
it.dependsOn(nodeJs.npmInstallTaskProvider)
|
it.dependsOn(nodeJs.npmInstallTaskProvider)
|
||||||
it.dependsOn(packageJsonTaskHolder)
|
it.dependsOn(packageJsonTaskHolder)
|
||||||
}.also { packageJsonTask ->
|
}.also { packageJsonTask ->
|
||||||
@@ -65,7 +64,7 @@ internal class KotlinCompilationNpmResolver(
|
|||||||
.withType(Zip::class.java)
|
.withType(Zip::class.java)
|
||||||
.named(npmProject.target.artifactsTaskName)
|
.named(npmProject.target.artifactsTaskName)
|
||||||
.configure {
|
.configure {
|
||||||
it.from(packageJsonTask)
|
it.dependsOn(packageJsonTask)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -180,6 +179,18 @@ internal class KotlinCompilationNpmResolver(
|
|||||||
internalDependencies.add(projectResolver[main])
|
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 {
|
plugins.forEach {
|
||||||
it.hookDependencies(
|
it.hookDependencies(
|
||||||
internalDependencies,
|
internalDependencies,
|
||||||
|
|||||||
Reference in New Issue
Block a user