[Gradle, JS] Commonize root package json to prepared files for extensibility via other npm package managers
#KT-34832 fixed #KT-35194 fixed
This commit is contained in:
-4
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
|
|||||||
import org.jetbrains.kotlin.gradle.targets.js.NpmVersions
|
import org.jetbrains.kotlin.gradle.targets.js.NpmVersions
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.KotlinNpmResolutionManager
|
import org.jetbrains.kotlin.gradle.targets.js.npm.KotlinNpmResolutionManager
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmApi
|
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmApi
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProject
|
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.KotlinNpmInstallTask
|
import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.KotlinNpmInstallTask
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.RootPackageJsonTask
|
import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.RootPackageJsonTask
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.yarn.Yarn
|
import org.jetbrains.kotlin.gradle.targets.js.yarn.Yarn
|
||||||
@@ -63,9 +62,6 @@ open class NodeJsRootExtension(val rootProject: Project) : ConfigurationPhaseAwa
|
|||||||
val rootPackageDir: File
|
val rootPackageDir: File
|
||||||
get() = rootProject.buildDir.resolve("js")
|
get() = rootProject.buildDir.resolve("js")
|
||||||
|
|
||||||
val rootPackageJson: File
|
|
||||||
get() = rootPackageDir.resolve(NpmProject.PACKAGE_JSON)
|
|
||||||
|
|
||||||
internal val rootNodeModulesStateFile: File
|
internal val rootNodeModulesStateFile: File
|
||||||
get() = rootPackageDir.resolve("node_modules.state")
|
get() = rootPackageDir.resolve("node_modules.state")
|
||||||
|
|
||||||
|
|||||||
+4
-9
@@ -10,7 +10,7 @@ import org.gradle.api.Project
|
|||||||
import org.gradle.api.plugins.BasePlugin
|
import org.gradle.api.plugins.BasePlugin
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension.Companion.EXTENSION_NAME
|
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension.Companion.EXTENSION_NAME
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.KotlinNpmInstallTask
|
import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.KotlinNpmInstallTask
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.RootPackageJsonTask
|
import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnPlugin
|
||||||
import org.jetbrains.kotlin.gradle.tasks.CleanDataTask
|
import org.jetbrains.kotlin.gradle.tasks.CleanDataTask
|
||||||
|
|
||||||
open class NodeJsRootPlugin : Plugin<Project> {
|
open class NodeJsRootPlugin : Plugin<Project> {
|
||||||
@@ -30,21 +30,16 @@ open class NodeJsRootPlugin : Plugin<Project> {
|
|||||||
|
|
||||||
val rootClean = project.rootProject.tasks.named(BasePlugin.CLEAN_TASK_NAME)
|
val rootClean = project.rootProject.tasks.named(BasePlugin.CLEAN_TASK_NAME)
|
||||||
|
|
||||||
val rootPackageJson = tasks.register(RootPackageJsonTask.NAME, RootPackageJsonTask::class.java) {
|
|
||||||
it.group = TASKS_GROUP_NAME
|
|
||||||
it.description = "Create root package.json"
|
|
||||||
|
|
||||||
it.mustRunAfter(rootClean)
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks.register(KotlinNpmInstallTask.NAME, KotlinNpmInstallTask::class.java) {
|
tasks.register(KotlinNpmInstallTask.NAME, KotlinNpmInstallTask::class.java) {
|
||||||
it.dependsOn(setupTask, rootPackageJson)
|
it.dependsOn(setupTask)
|
||||||
it.group = TASKS_GROUP_NAME
|
it.group = TASKS_GROUP_NAME
|
||||||
it.description = "Find, download and link NPM dependencies and projects"
|
it.description = "Find, download and link NPM dependencies and projects"
|
||||||
|
|
||||||
it.mustRunAfter(rootClean)
|
it.mustRunAfter(rootClean)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
YarnPlugin.apply(project)
|
||||||
|
|
||||||
tasks.register("node" + CleanDataTask.NAME_SUFFIX, CleanDataTask::class.java) {
|
tasks.register("node" + CleanDataTask.NAME_SUFFIX, CleanDataTask::class.java) {
|
||||||
it.cleanableStoreProvider = provider { settings.requireConfigured().cleanableStore }
|
it.cleanableStoreProvider = provider { settings.requireConfigured().cleanableStore }
|
||||||
it.group = TASKS_GROUP_NAME
|
it.group = TASKS_GROUP_NAME
|
||||||
|
|||||||
+2
@@ -17,6 +17,8 @@ interface NpmApi {
|
|||||||
|
|
||||||
fun resolveProject(resolvedNpmProject: KotlinCompilationNpmResolution)
|
fun resolveProject(resolvedNpmProject: KotlinCompilationNpmResolution)
|
||||||
|
|
||||||
|
fun preparedFiles(project: Project): Collection<File>
|
||||||
|
|
||||||
fun prepareRootProject(
|
fun prepareRootProject(
|
||||||
rootProject: Project,
|
rootProject: Project,
|
||||||
subProjects: Collection<KotlinCompilationNpmResolution>
|
subProjects: Collection<KotlinCompilationNpmResolution>
|
||||||
|
|||||||
+10
-5
@@ -6,7 +6,10 @@
|
|||||||
package org.jetbrains.kotlin.gradle.targets.js.npm.tasks
|
package org.jetbrains.kotlin.gradle.targets.js.npm.tasks
|
||||||
|
|
||||||
import org.gradle.api.DefaultTask
|
import org.gradle.api.DefaultTask
|
||||||
import org.gradle.api.tasks.*
|
import org.gradle.api.tasks.Input
|
||||||
|
import org.gradle.api.tasks.InputFiles
|
||||||
|
import org.gradle.api.tasks.OutputFile
|
||||||
|
import org.gradle.api.tasks.TaskAction
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
|
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
@@ -15,7 +18,9 @@ open class KotlinNpmInstallTask : DefaultTask() {
|
|||||||
check(project == project.rootProject)
|
check(project == project.rootProject)
|
||||||
|
|
||||||
onlyIf {
|
onlyIf {
|
||||||
rootPackageJson.exists()
|
preparedFiles.all {
|
||||||
|
it.exists()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -30,9 +35,9 @@ open class KotlinNpmInstallTask : DefaultTask() {
|
|||||||
val packageJsonFiles: Collection<File>
|
val packageJsonFiles: Collection<File>
|
||||||
get() = resolutionManager.packageJsonFiles
|
get() = resolutionManager.packageJsonFiles
|
||||||
|
|
||||||
@get:InputFile
|
@get:InputFiles
|
||||||
val rootPackageJson: File
|
val preparedFiles: Collection<File>
|
||||||
get() = nodeJs.rootPackageJson
|
get() = nodeJs.packageManager.preparedFiles(project)
|
||||||
|
|
||||||
// avoid using node_modules as output directory, as it is significantly slows down build
|
// avoid using node_modules as output directory, as it is significantly slows down build
|
||||||
@get:OutputFile
|
@get:OutputFile
|
||||||
|
|||||||
+2
-1
@@ -9,6 +9,7 @@ import org.gradle.api.DefaultTask
|
|||||||
import org.gradle.api.tasks.OutputFile
|
import org.gradle.api.tasks.OutputFile
|
||||||
import org.gradle.api.tasks.TaskAction
|
import org.gradle.api.tasks.TaskAction
|
||||||
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.NpmProject
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
open class RootPackageJsonTask : DefaultTask() {
|
open class RootPackageJsonTask : DefaultTask() {
|
||||||
@@ -25,7 +26,7 @@ open class RootPackageJsonTask : DefaultTask() {
|
|||||||
|
|
||||||
@get:OutputFile
|
@get:OutputFile
|
||||||
val rootPackageJson: File
|
val rootPackageJson: File
|
||||||
get() = nodeJs.rootPackageJson
|
get() = nodeJs.rootPackageDir.resolve(NpmProject.PACKAGE_JSON)
|
||||||
|
|
||||||
@TaskAction
|
@TaskAction
|
||||||
fun resolve() {
|
fun resolve() {
|
||||||
|
|||||||
+1
-1
@@ -93,7 +93,7 @@ data class KotlinWebpackConfig(
|
|||||||
val noInfo: Boolean = true,
|
val noInfo: Boolean = true,
|
||||||
val open: Any = true,
|
val open: Any = true,
|
||||||
val overlay: Any = false,
|
val overlay: Any = false,
|
||||||
val port: Int = 8080,
|
val port: Int? = null,
|
||||||
val proxy: Map<String, Any>? = null,
|
val proxy: Map<String, Any>? = null,
|
||||||
val contentBase: List<String>
|
val contentBase: List<String>
|
||||||
) : Serializable
|
) : Serializable
|
||||||
|
|||||||
+13
-9
@@ -9,6 +9,7 @@ import org.gradle.api.Project
|
|||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmApi
|
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmApi
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmDependency
|
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmDependency
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinCompilationNpmResolution
|
import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinCompilationNpmResolution
|
||||||
|
import java.io.File
|
||||||
|
|
||||||
class Yarn : NpmApi {
|
class Yarn : NpmApi {
|
||||||
private val yarnWorkspaces = YarnWorkspaces()
|
private val yarnWorkspaces = YarnWorkspaces()
|
||||||
@@ -24,6 +25,18 @@ class Yarn : NpmApi {
|
|||||||
override fun resolveProject(resolvedNpmProject: KotlinCompilationNpmResolution) =
|
override fun resolveProject(resolvedNpmProject: KotlinCompilationNpmResolution) =
|
||||||
getDelegate(resolvedNpmProject.project).resolveProject(resolvedNpmProject)
|
getDelegate(resolvedNpmProject.project).resolveProject(resolvedNpmProject)
|
||||||
|
|
||||||
|
override fun preparedFiles(project: Project): Collection<File> =
|
||||||
|
getDelegate(project).preparedFiles(project)
|
||||||
|
|
||||||
|
override fun prepareRootProject(
|
||||||
|
rootProject: Project,
|
||||||
|
subProjects: Collection<KotlinCompilationNpmResolution>
|
||||||
|
) = getDelegate(rootProject.project)
|
||||||
|
.prepareRootProject(
|
||||||
|
rootProject,
|
||||||
|
subProjects
|
||||||
|
)
|
||||||
|
|
||||||
override fun resolveRootProject(
|
override fun resolveRootProject(
|
||||||
rootProject: Project,
|
rootProject: Project,
|
||||||
npmProjects: Collection<KotlinCompilationNpmResolution>,
|
npmProjects: Collection<KotlinCompilationNpmResolution>,
|
||||||
@@ -44,13 +57,4 @@ class Yarn : NpmApi {
|
|||||||
dependency,
|
dependency,
|
||||||
transitive
|
transitive
|
||||||
)
|
)
|
||||||
|
|
||||||
override fun prepareRootProject(
|
|
||||||
rootProject: Project,
|
|
||||||
subProjects: Collection<KotlinCompilationNpmResolution>
|
|
||||||
) = getDelegate(rootProject.project)
|
|
||||||
.prepareRootProject(
|
|
||||||
rootProject,
|
|
||||||
subProjects
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
+18
-2
@@ -1,13 +1,16 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jetbrains.kotlin.gradle.targets.js.yarn
|
package org.jetbrains.kotlin.gradle.targets.js.yarn
|
||||||
|
|
||||||
import org.gradle.api.Plugin
|
import org.gradle.api.Plugin
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
|
import org.gradle.api.plugins.BasePlugin
|
||||||
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.tasks.KotlinNpmInstallTask
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.RootPackageJsonTask
|
||||||
import org.jetbrains.kotlin.gradle.tasks.CleanDataTask
|
import org.jetbrains.kotlin.gradle.tasks.CleanDataTask
|
||||||
|
|
||||||
open class YarnPlugin : Plugin<Project> {
|
open class YarnPlugin : Plugin<Project> {
|
||||||
@@ -24,6 +27,19 @@ open class YarnPlugin : Plugin<Project> {
|
|||||||
it.dependsOn(nodeJs.nodeJsSetupTask)
|
it.dependsOn(nodeJs.nodeJsSetupTask)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val rootClean = project.rootProject.tasks.named(BasePlugin.CLEAN_TASK_NAME)
|
||||||
|
|
||||||
|
val rootPackageJson = tasks.register(RootPackageJsonTask.NAME, RootPackageJsonTask::class.java) {
|
||||||
|
it.group = NodeJsRootPlugin.TASKS_GROUP_NAME
|
||||||
|
it.description = "Create root package.json"
|
||||||
|
|
||||||
|
it.mustRunAfter(rootClean)
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.named(KotlinNpmInstallTask.NAME).configure {
|
||||||
|
it.dependsOn(rootPackageJson)
|
||||||
|
}
|
||||||
|
|
||||||
tasks.register("yarn" + CleanDataTask.NAME_SUFFIX, CleanDataTask::class.java) {
|
tasks.register("yarn" + CleanDataTask.NAME_SUFFIX, CleanDataTask::class.java) {
|
||||||
it.cleanableStoreProvider = provider { yarnRootExtension.requireConfigured().cleanableStore }
|
it.cleanableStoreProvider = provider { yarnRootExtension.requireConfigured().cleanableStore }
|
||||||
it.description = "Clean unused local yarn version"
|
it.description = "Clean unused local yarn version"
|
||||||
|
|||||||
+9
-5
@@ -9,6 +9,7 @@ import org.gradle.api.Project
|
|||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmApi
|
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmApi
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.PackageJsonUpToDateCheck
|
import org.jetbrains.kotlin.gradle.targets.js.npm.PackageJsonUpToDateCheck
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinCompilationNpmResolution
|
import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinCompilationNpmResolution
|
||||||
|
import java.io.File
|
||||||
|
|
||||||
class YarnSimple : YarnBasics() {
|
class YarnSimple : YarnBasics() {
|
||||||
override fun resolveProject(resolvedNpmProject: KotlinCompilationNpmResolution) {
|
override fun resolveProject(resolvedNpmProject: KotlinCompilationNpmResolution) {
|
||||||
@@ -27,15 +28,18 @@ class YarnSimple : YarnBasics() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun preparedFiles(project: Project): Collection<File> =
|
||||||
|
emptyList()
|
||||||
|
|
||||||
|
override fun prepareRootProject(
|
||||||
|
rootProject: Project,
|
||||||
|
subProjects: Collection<KotlinCompilationNpmResolution>
|
||||||
|
) = Unit
|
||||||
|
|
||||||
override fun resolveRootProject(
|
override fun resolveRootProject(
|
||||||
rootProject: Project,
|
rootProject: Project,
|
||||||
npmProjects: Collection<KotlinCompilationNpmResolution>,
|
npmProjects: Collection<KotlinCompilationNpmResolution>,
|
||||||
skipExecution: Boolean,
|
skipExecution: Boolean,
|
||||||
cliArgs: List<String>
|
cliArgs: List<String>
|
||||||
) = Unit
|
) = Unit
|
||||||
|
|
||||||
override fun prepareRootProject(
|
|
||||||
rootProject: Project,
|
|
||||||
subProjects: Collection<KotlinCompilationNpmResolution>
|
|
||||||
) = Unit
|
|
||||||
}
|
}
|
||||||
+10
-2
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.gradle.targets.js.yarn
|
|||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
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.NpmApi
|
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmApi
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProject
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.PackageJson
|
import org.jetbrains.kotlin.gradle.targets.js.npm.PackageJson
|
||||||
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
|
||||||
@@ -15,6 +16,14 @@ import java.io.File
|
|||||||
class YarnWorkspaces : YarnBasics() {
|
class YarnWorkspaces : YarnBasics() {
|
||||||
override fun resolveProject(resolvedNpmProject: KotlinCompilationNpmResolution) = Unit
|
override fun resolveProject(resolvedNpmProject: KotlinCompilationNpmResolution) = Unit
|
||||||
|
|
||||||
|
override fun preparedFiles(project: Project): Collection<File> {
|
||||||
|
return listOf(
|
||||||
|
NodeJsRootPlugin.apply(project.rootProject)
|
||||||
|
.rootPackageDir
|
||||||
|
.resolve(NpmProject.PACKAGE_JSON)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
override fun prepareRootProject(
|
override fun prepareRootProject(
|
||||||
rootProject: Project,
|
rootProject: Project,
|
||||||
subProjects: Collection<KotlinCompilationNpmResolution>
|
subProjects: Collection<KotlinCompilationNpmResolution>
|
||||||
@@ -31,8 +40,7 @@ class YarnWorkspaces : YarnBasics() {
|
|||||||
rootProject: Project,
|
rootProject: Project,
|
||||||
npmProjects: Collection<KotlinCompilationNpmResolution>
|
npmProjects: Collection<KotlinCompilationNpmResolution>
|
||||||
) {
|
) {
|
||||||
val nodeJs = NodeJsRootPlugin.apply(rootProject)
|
val rootPackageJsonFile = preparedFiles(rootProject).single()
|
||||||
val rootPackageJsonFile = nodeJs.rootPackageJson
|
|
||||||
|
|
||||||
saveRootProjectWorkspacesPackageJson(rootProject, npmProjects, rootPackageJsonFile)
|
saveRootProjectWorkspacesPackageJson(rootProject, npmProjects, rootPackageJsonFile)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user