Gradle, js: create one npmResolve per build (share between subprojects)
#KT-30530
This commit is contained in:
-3
@@ -14,16 +14,13 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget
|
||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBrowserDsl
|
||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsNodeDsl
|
||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsTargetDsl
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmResolveTask
|
||||
import org.jetbrains.kotlin.gradle.targets.js.subtargets.KotlinBrowserJs
|
||||
import org.jetbrains.kotlin.gradle.targets.js.subtargets.KotlinNodeJs
|
||||
import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask
|
||||
import org.jetbrains.kotlin.gradle.testing.internal.getAggregatedTestTask
|
||||
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||
|
||||
class KotlinJsTarget(project: Project, platformType: KotlinPlatformType) :
|
||||
KotlinOnlyTarget<KotlinJsCompilation>(project, platformType), KotlinJsTargetDsl {
|
||||
val npmResolveTaskHolder = project.locateOrRegisterTask<NpmResolveTask>("npmResolve") {}
|
||||
|
||||
val testTaskName get() = lowerCamelCaseName(disambiguationClassifier, testTaskNameSuffix)
|
||||
val testTask
|
||||
|
||||
+2
-2
@@ -5,12 +5,12 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.targets.js
|
||||
|
||||
import org.gradle.api.plugins.JavaBasePlugin
|
||||
import org.jetbrains.kotlin.gradle.plugin.Kotlin2JsSourceSetProcessor
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetProcessor
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetConfigurator
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget
|
||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.nodeJs
|
||||
import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider
|
||||
|
||||
open class KotlinJsTargetConfigurator(kotlinPluginVersion: String) :
|
||||
@@ -22,7 +22,7 @@ open class KotlinJsTargetConfigurator(kotlinPluginVersion: String) :
|
||||
super.configureTarget(target)
|
||||
|
||||
target.compilations.forEach {
|
||||
it.compileKotlinTask.dependsOn(target.npmResolveTaskHolder.getTaskOrProvider())
|
||||
it.compileKotlinTask.dependsOn(target.project.nodeJs.root.npmResolveTask)
|
||||
}
|
||||
|
||||
if (target.disambiguationClassifier != null) {
|
||||
|
||||
+1
-22
@@ -6,33 +6,12 @@
|
||||
package org.jetbrains.kotlin.gradle.targets.js.nodejs
|
||||
|
||||
import org.gradle.api.tasks.AbstractExecTask
|
||||
import org.gradle.api.tasks.Internal
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
|
||||
import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile
|
||||
import java.io.File
|
||||
|
||||
open class NodeJsExec : AbstractExecTask<NodeJsExec>(NodeJsExec::class.java) {
|
||||
private val npmProject by lazy { project.npmProject }
|
||||
|
||||
init {
|
||||
val nodeJs = NodeJsPlugin.apply(project).root
|
||||
dependsOn(nodeJs.nodeJsSetupTask)
|
||||
dependsOn(nodeJs.npmResolveTask)
|
||||
|
||||
executable = nodeJs.environment.nodeExecutable
|
||||
workingDir = project.npmProject.nodeWorkDir
|
||||
}
|
||||
|
||||
@Internal
|
||||
var script: String? = null
|
||||
|
||||
fun require(moduleName: String) {
|
||||
args("--require", moduleName)
|
||||
}
|
||||
|
||||
fun script(file: File) {
|
||||
check(script == null) {
|
||||
"Script was already set to $script"
|
||||
}
|
||||
script = file.canonicalFile.relativeToOrSelf(npmProject.nodeWorkDir).path
|
||||
}
|
||||
}
|
||||
+7
-1
@@ -5,6 +5,7 @@ import org.gradle.api.Project
|
||||
import org.gradle.api.plugins.BasePlugin
|
||||
import org.gradle.api.tasks.Delete
|
||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension.Companion.NODE_JS
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmResolveTask
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
|
||||
|
||||
open class NodeJsPlugin : Plugin<Project> {
|
||||
@@ -14,7 +15,12 @@ open class NodeJsPlugin : Plugin<Project> {
|
||||
}
|
||||
|
||||
this.extensions.create(NODE_JS, NodeJsRootExtension::class.java, this)
|
||||
tasks.create(NodeJsSetupTask.NAME, NodeJsSetupTask::class.java)
|
||||
|
||||
val setupTask = tasks.create(NodeJsSetupTask.NAME, NodeJsSetupTask::class.java)
|
||||
val npmResolveTask = tasks.create(NpmResolveTask.NAME, NpmResolveTask::class.java)
|
||||
npmResolveTask.outputs.upToDateWhen { false }
|
||||
|
||||
npmResolveTask.dependsOn(setupTask)
|
||||
|
||||
setupCleanNodeModulesTask(project)
|
||||
|
||||
|
||||
+6
@@ -2,9 +2,12 @@ package org.jetbrains.kotlin.gradle.targets.js.nodejs
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.jetbrains.kotlin.gradle.logging.kotlinInfo
|
||||
import org.jetbrains.kotlin.gradle.plugin.TaskHolder
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProjectLayout
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmApi
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmResolveTask
|
||||
import org.jetbrains.kotlin.gradle.targets.js.yarn.Yarn
|
||||
import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask
|
||||
import java.io.File
|
||||
|
||||
open class NodeJsRootExtension(project: Project) : NodeJsExtension(project) {
|
||||
@@ -26,6 +29,9 @@ open class NodeJsRootExtension(project: Project) : NodeJsExtension(project) {
|
||||
val nodeJsSetupTask: NodeJsSetupTask
|
||||
get() = project.tasks.getByName(NodeJsSetupTask.NAME) as NodeJsSetupTask
|
||||
|
||||
val npmResolveTask: NpmResolveTask
|
||||
get() = project.tasks.getByName(NpmResolveTask.NAME) as NpmResolveTask
|
||||
|
||||
internal val environment: NodeJsEnv
|
||||
get() {
|
||||
val platform = NodeJsPlatform.name
|
||||
|
||||
+4
@@ -13,4 +13,8 @@ open class NpmResolveTask : AbstractTask() {
|
||||
fun resolve() {
|
||||
NpmResolver.resolve(project)
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val NAME = "npmResolve"
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -43,7 +43,7 @@ class KotlinBrowserJs(target: KotlinJsTarget) :
|
||||
|
||||
project.createOrRegisterTask<KotlinWebpack>(disambiguateCamelCased("webpack")) {
|
||||
val compileKotlinTask = compilation.compileKotlinTask
|
||||
it.dependsOn(target.npmResolveTaskHolder.getTaskOrProvider(), compileKotlinTask)
|
||||
it.dependsOn(target.project.nodeJs.root.npmResolveTask, compileKotlinTask)
|
||||
|
||||
it.entry = npmProject.compileOutput(compileKotlinTask)
|
||||
|
||||
@@ -53,7 +53,7 @@ class KotlinBrowserJs(target: KotlinJsTarget) :
|
||||
val run = project.createOrRegisterTask<KotlinWebpack>(disambiguateCamelCased("run")) {
|
||||
val compileKotlinTask = compilation.compileKotlinTask
|
||||
it.dependsOn(
|
||||
target.npmResolveTaskHolder.getTaskOrProvider(),
|
||||
target.project.nodeJs.root.npmResolveTask,
|
||||
compileKotlinTask,
|
||||
project.getTasksByName(compilation.processResourcesTaskName, false)
|
||||
)
|
||||
|
||||
+2
-1
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.gradle.plugin.whenEvaluated
|
||||
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
|
||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsSubTargetDsl
|
||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsPlugin
|
||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.nodeJs
|
||||
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
|
||||
import org.jetbrains.kotlin.gradle.tasks.createOrRegisterTask
|
||||
import org.jetbrains.kotlin.gradle.testing.internal.configureConventions
|
||||
@@ -65,7 +66,7 @@ abstract class KotlinJsSubTarget(
|
||||
|
||||
testJs.group = LifecycleBasePlugin.VERIFICATION_GROUP
|
||||
|
||||
testJs.dependsOn(target.npmResolveTaskHolder.getTaskOrProvider(), compileTask, nodeJs.nodeJsSetupTask)
|
||||
testJs.dependsOn(target.project.nodeJs.root.npmResolveTask, compileTask, nodeJs.nodeJsSetupTask)
|
||||
|
||||
testJs.onlyIf {
|
||||
compileTask.outputFile.exists()
|
||||
|
||||
+3
-2
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
||||
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
|
||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsNodeDsl
|
||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsExec
|
||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.nodeJs
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
|
||||
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
|
||||
import org.jetbrains.kotlin.gradle.tasks.createOrRegisterTask
|
||||
@@ -32,7 +33,7 @@ class KotlinNodeJs(target: KotlinJsTarget) :
|
||||
|
||||
val runTaskHolder = project.createOrRegisterTask<NodeJsExec>(disambiguateCamelCased("run")) { runTask ->
|
||||
val compileKotlinTask = compilation.compileKotlinTask
|
||||
runTask.dependsOn(target.npmResolveTaskHolder.getTaskOrProvider(), compileKotlinTask)
|
||||
runTask.dependsOn(target.project.nodeJs.root.npmResolveTask, compileKotlinTask)
|
||||
|
||||
val npmProject = project.npmProject
|
||||
runTask.args(npmProject.compileOutput(compileKotlinTask))
|
||||
@@ -52,7 +53,7 @@ class KotlinNodeJs(target: KotlinJsTarget) :
|
||||
runtimeOnly(kotlin("test-nodejs-runner"))
|
||||
}
|
||||
|
||||
target.npmResolveTaskHolder.doGetTask().doLast {
|
||||
target.project.nodeJs.root.npmResolveTask.doLast {
|
||||
runTaskHolder.configure { runTask ->
|
||||
runTask.args(
|
||||
"--require",
|
||||
|
||||
-1
@@ -12,7 +12,6 @@ import org.gradle.api.tasks.SkipWhenEmpty
|
||||
import org.gradle.process.internal.DefaultProcessForkOptions
|
||||
import org.gradle.util.ConfigureUtil
|
||||
import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesTestExecutionSpec
|
||||
import org.jetbrains.kotlin.gradle.plugin.HasKotlinDependencies
|
||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsPlugin
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.*
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmResolver
|
||||
|
||||
-3
@@ -6,9 +6,6 @@
|
||||
package org.jetbrains.kotlin.gradle.targets.js.yarn
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.internal.project.ProjectInternal
|
||||
import org.gradle.internal.hash.FileHasher
|
||||
import org.jetbrains.kotlin.daemon.common.toHexString
|
||||
import org.jetbrains.kotlin.gradle.internal.execWithProgress
|
||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsPlugin
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.*
|
||||
|
||||
Reference in New Issue
Block a user