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.KotlinJsBrowserDsl
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsNodeDsl
|
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.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.KotlinBrowserJs
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.subtargets.KotlinNodeJs
|
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.testing.internal.getAggregatedTestTask
|
||||||
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||||
|
|
||||||
class KotlinJsTarget(project: Project, platformType: KotlinPlatformType) :
|
class KotlinJsTarget(project: Project, platformType: KotlinPlatformType) :
|
||||||
KotlinOnlyTarget<KotlinJsCompilation>(project, platformType), KotlinJsTargetDsl {
|
KotlinOnlyTarget<KotlinJsCompilation>(project, platformType), KotlinJsTargetDsl {
|
||||||
val npmResolveTaskHolder = project.locateOrRegisterTask<NpmResolveTask>("npmResolve") {}
|
|
||||||
|
|
||||||
val testTaskName get() = lowerCamelCaseName(disambiguationClassifier, testTaskNameSuffix)
|
val testTaskName get() = lowerCamelCaseName(disambiguationClassifier, testTaskNameSuffix)
|
||||||
val testTask
|
val testTask
|
||||||
|
|||||||
+2
-2
@@ -5,12 +5,12 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.gradle.targets.js
|
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.Kotlin2JsSourceSetProcessor
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetProcessor
|
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetProcessor
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetConfigurator
|
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetConfigurator
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.nodejs.nodeJs
|
||||||
import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider
|
import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider
|
||||||
|
|
||||||
open class KotlinJsTargetConfigurator(kotlinPluginVersion: String) :
|
open class KotlinJsTargetConfigurator(kotlinPluginVersion: String) :
|
||||||
@@ -22,7 +22,7 @@ open class KotlinJsTargetConfigurator(kotlinPluginVersion: String) :
|
|||||||
super.configureTarget(target)
|
super.configureTarget(target)
|
||||||
|
|
||||||
target.compilations.forEach {
|
target.compilations.forEach {
|
||||||
it.compileKotlinTask.dependsOn(target.npmResolveTaskHolder.getTaskOrProvider())
|
it.compileKotlinTask.dependsOn(target.project.nodeJs.root.npmResolveTask)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (target.disambiguationClassifier != null) {
|
if (target.disambiguationClassifier != null) {
|
||||||
|
|||||||
+1
-22
@@ -6,33 +6,12 @@
|
|||||||
package org.jetbrains.kotlin.gradle.targets.js.nodejs
|
package org.jetbrains.kotlin.gradle.targets.js.nodejs
|
||||||
|
|
||||||
import org.gradle.api.tasks.AbstractExecTask
|
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) {
|
open class NodeJsExec : AbstractExecTask<NodeJsExec>(NodeJsExec::class.java) {
|
||||||
private val npmProject by lazy { project.npmProject }
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
val nodeJs = NodeJsPlugin.apply(project).root
|
val nodeJs = NodeJsPlugin.apply(project).root
|
||||||
dependsOn(nodeJs.nodeJsSetupTask)
|
dependsOn(nodeJs.npmResolveTask)
|
||||||
|
|
||||||
executable = nodeJs.environment.nodeExecutable
|
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.plugins.BasePlugin
|
||||||
import org.gradle.api.tasks.Delete
|
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.nodejs.NodeJsRootExtension.Companion.NODE_JS
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmResolveTask
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
|
import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
|
||||||
|
|
||||||
open class NodeJsPlugin : Plugin<Project> {
|
open class NodeJsPlugin : Plugin<Project> {
|
||||||
@@ -14,7 +15,12 @@ open class NodeJsPlugin : Plugin<Project> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.extensions.create(NODE_JS, NodeJsRootExtension::class.java, this)
|
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)
|
setupCleanNodeModulesTask(project)
|
||||||
|
|
||||||
|
|||||||
+6
@@ -2,9 +2,12 @@ package org.jetbrains.kotlin.gradle.targets.js.nodejs
|
|||||||
|
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
import org.jetbrains.kotlin.gradle.logging.kotlinInfo
|
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.NpmProjectLayout
|
||||||
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.NpmResolveTask
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.yarn.Yarn
|
import org.jetbrains.kotlin.gradle.targets.js.yarn.Yarn
|
||||||
|
import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
open class NodeJsRootExtension(project: Project) : NodeJsExtension(project) {
|
open class NodeJsRootExtension(project: Project) : NodeJsExtension(project) {
|
||||||
@@ -26,6 +29,9 @@ open class NodeJsRootExtension(project: Project) : NodeJsExtension(project) {
|
|||||||
val nodeJsSetupTask: NodeJsSetupTask
|
val nodeJsSetupTask: NodeJsSetupTask
|
||||||
get() = project.tasks.getByName(NodeJsSetupTask.NAME) as NodeJsSetupTask
|
get() = project.tasks.getByName(NodeJsSetupTask.NAME) as NodeJsSetupTask
|
||||||
|
|
||||||
|
val npmResolveTask: NpmResolveTask
|
||||||
|
get() = project.tasks.getByName(NpmResolveTask.NAME) as NpmResolveTask
|
||||||
|
|
||||||
internal val environment: NodeJsEnv
|
internal val environment: NodeJsEnv
|
||||||
get() {
|
get() {
|
||||||
val platform = NodeJsPlatform.name
|
val platform = NodeJsPlatform.name
|
||||||
|
|||||||
+4
@@ -13,4 +13,8 @@ open class NpmResolveTask : AbstractTask() {
|
|||||||
fun resolve() {
|
fun resolve() {
|
||||||
NpmResolver.resolve(project)
|
NpmResolver.resolve(project)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val NAME = "npmResolve"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+2
-2
@@ -43,7 +43,7 @@ class KotlinBrowserJs(target: KotlinJsTarget) :
|
|||||||
|
|
||||||
project.createOrRegisterTask<KotlinWebpack>(disambiguateCamelCased("webpack")) {
|
project.createOrRegisterTask<KotlinWebpack>(disambiguateCamelCased("webpack")) {
|
||||||
val compileKotlinTask = compilation.compileKotlinTask
|
val compileKotlinTask = compilation.compileKotlinTask
|
||||||
it.dependsOn(target.npmResolveTaskHolder.getTaskOrProvider(), compileKotlinTask)
|
it.dependsOn(target.project.nodeJs.root.npmResolveTask, compileKotlinTask)
|
||||||
|
|
||||||
it.entry = npmProject.compileOutput(compileKotlinTask)
|
it.entry = npmProject.compileOutput(compileKotlinTask)
|
||||||
|
|
||||||
@@ -53,7 +53,7 @@ class KotlinBrowserJs(target: KotlinJsTarget) :
|
|||||||
val run = project.createOrRegisterTask<KotlinWebpack>(disambiguateCamelCased("run")) {
|
val run = project.createOrRegisterTask<KotlinWebpack>(disambiguateCamelCased("run")) {
|
||||||
val compileKotlinTask = compilation.compileKotlinTask
|
val compileKotlinTask = compilation.compileKotlinTask
|
||||||
it.dependsOn(
|
it.dependsOn(
|
||||||
target.npmResolveTaskHolder.getTaskOrProvider(),
|
target.project.nodeJs.root.npmResolveTask,
|
||||||
compileKotlinTask,
|
compileKotlinTask,
|
||||||
project.getTasksByName(compilation.processResourcesTaskName, false)
|
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.KotlinJsTarget
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsSubTargetDsl
|
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.NodeJsPlugin
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.nodejs.nodeJs
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
|
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
|
||||||
import org.jetbrains.kotlin.gradle.tasks.createOrRegisterTask
|
import org.jetbrains.kotlin.gradle.tasks.createOrRegisterTask
|
||||||
import org.jetbrains.kotlin.gradle.testing.internal.configureConventions
|
import org.jetbrains.kotlin.gradle.testing.internal.configureConventions
|
||||||
@@ -65,7 +66,7 @@ abstract class KotlinJsSubTarget(
|
|||||||
|
|
||||||
testJs.group = LifecycleBasePlugin.VERIFICATION_GROUP
|
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 {
|
testJs.onlyIf {
|
||||||
compileTask.outputFile.exists()
|
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.KotlinJsTarget
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsNodeDsl
|
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.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.npm.npmProject
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
|
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
|
||||||
import org.jetbrains.kotlin.gradle.tasks.createOrRegisterTask
|
import org.jetbrains.kotlin.gradle.tasks.createOrRegisterTask
|
||||||
@@ -32,7 +33,7 @@ class KotlinNodeJs(target: KotlinJsTarget) :
|
|||||||
|
|
||||||
val runTaskHolder = project.createOrRegisterTask<NodeJsExec>(disambiguateCamelCased("run")) { runTask ->
|
val runTaskHolder = project.createOrRegisterTask<NodeJsExec>(disambiguateCamelCased("run")) { runTask ->
|
||||||
val compileKotlinTask = compilation.compileKotlinTask
|
val compileKotlinTask = compilation.compileKotlinTask
|
||||||
runTask.dependsOn(target.npmResolveTaskHolder.getTaskOrProvider(), compileKotlinTask)
|
runTask.dependsOn(target.project.nodeJs.root.npmResolveTask, compileKotlinTask)
|
||||||
|
|
||||||
val npmProject = project.npmProject
|
val npmProject = project.npmProject
|
||||||
runTask.args(npmProject.compileOutput(compileKotlinTask))
|
runTask.args(npmProject.compileOutput(compileKotlinTask))
|
||||||
@@ -52,7 +53,7 @@ class KotlinNodeJs(target: KotlinJsTarget) :
|
|||||||
runtimeOnly(kotlin("test-nodejs-runner"))
|
runtimeOnly(kotlin("test-nodejs-runner"))
|
||||||
}
|
}
|
||||||
|
|
||||||
target.npmResolveTaskHolder.doGetTask().doLast {
|
target.project.nodeJs.root.npmResolveTask.doLast {
|
||||||
runTaskHolder.configure { runTask ->
|
runTaskHolder.configure { runTask ->
|
||||||
runTask.args(
|
runTask.args(
|
||||||
"--require",
|
"--require",
|
||||||
|
|||||||
-1
@@ -12,7 +12,6 @@ import org.gradle.api.tasks.SkipWhenEmpty
|
|||||||
import org.gradle.process.internal.DefaultProcessForkOptions
|
import org.gradle.process.internal.DefaultProcessForkOptions
|
||||||
import org.gradle.util.ConfigureUtil
|
import org.gradle.util.ConfigureUtil
|
||||||
import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesTestExecutionSpec
|
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.nodejs.NodeJsPlugin
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.*
|
import org.jetbrains.kotlin.gradle.targets.js.npm.*
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmResolver
|
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmResolver
|
||||||
|
|||||||
-3
@@ -6,9 +6,6 @@
|
|||||||
package org.jetbrains.kotlin.gradle.targets.js.yarn
|
package org.jetbrains.kotlin.gradle.targets.js.yarn
|
||||||
|
|
||||||
import org.gradle.api.Project
|
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.internal.execWithProgress
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsPlugin
|
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.*
|
||||||
|
|||||||
Reference in New Issue
Block a user