From ba9c632f155ab66adf97b2c67c18cec290752feb Mon Sep 17 00:00:00 2001 From: Sergey Rostov Date: Mon, 12 Aug 2019 10:24:27 +0300 Subject: [PATCH] Gradle, npm: use state file as fake output for :kotlinNpmInstall task This is required in case when NpmSimpleLinker works (instead of yarn). NpmSimpleLinker will not produce yarn.lock file, so :kotlinNpmInstall was always up-to-date. Adding fake state file fixes the problem. #KT-32874 Fixed --- .../kotlin/gradle/targets/js/nodejs/NodeJsRootExtension.kt | 3 +++ .../gradle/targets/js/npm/resolver/KotlinRootNpmResolver.kt | 2 ++ .../gradle/targets/js/npm/tasks/KotlinNpmInstallTask.kt | 5 +++++ 3 files changed, 10 insertions(+) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsRootExtension.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsRootExtension.kt index d695be9b0f5..ada930b131e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsRootExtension.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsRootExtension.kt @@ -58,6 +58,9 @@ open class NodeJsRootExtension(val rootProject: Project) { val rootPackageDir: File get() = rootProject.buildDir.resolve("js") + internal val rootNodeModulesStateFile: File + get() = rootPackageDir.resolve("node_modules.state") + val projectPackagesDir: File get() = rootPackageDir.resolve("packages") diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinRootNpmResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinRootNpmResolver.kt index ebcd81ea991..62d3481d77f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinRootNpmResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinRootNpmResolver.kt @@ -98,6 +98,8 @@ internal class KotlinRootNpmResolver internal constructor( } } + nodeJs.rootNodeModulesStateFile.writeText(System.currentTimeMillis().toString()) + upToDateChecks.forEach { it.commit() } return KotlinRootNpmResolution(rootProject, projectResolutions) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinNpmInstallTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinNpmInstallTask.kt index b234efdf457..9520aa8f4a8 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinNpmInstallTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinNpmInstallTask.kt @@ -26,6 +26,11 @@ open class KotlinNpmInstallTask : DefaultTask() { val packageJsonFiles: Collection get() = resolutionManager.packageJsonFiles + // avoid using node_modules as output directory, as it is significantly slows down build + @get:OutputFile + val nodeModulesState: File + get() = nodeJs.rootNodeModulesStateFile + @get:OutputFile val yarnLock: File get() = nodeJs.rootPackageDir.resolve("yarn.lock")