[Gradle, JS] Existence of node_modules for up-to-date of kotlinNpmInstall

[Gradle, JS] No dev deps in packages_imported

^KT-57920 fixed
This commit is contained in:
Ilya Goncharov
2023-04-11 11:52:29 +00:00
committed by Space Team
parent 7d37bb1f78
commit d2c2a86cb7
3 changed files with 33 additions and 7 deletions
@@ -67,20 +67,22 @@ open class NodeJsRootPlugin : Plugin<Project> {
it.gradleNodeModules.set(gradleNodeModulesProvider)
}
val npmInstall = project.registerTask<KotlinNpmInstallTask>(KotlinNpmInstallTask.NAME) {
it.dependsOn(setupTask)
it.dependsOn(setupFileHasherTask)
it.group = TASKS_GROUP_NAME
it.description = "Find, download and link NPM dependencies and projects"
val npmInstall = project.registerTask<KotlinNpmInstallTask>(KotlinNpmInstallTask.NAME) { npmInstall ->
npmInstall.dependsOn(setupTask)
npmInstall.dependsOn(setupFileHasherTask)
npmInstall.group = TASKS_GROUP_NAME
npmInstall.description = "Find, download and link NPM dependencies and projects"
it.onlyIfCompat("No package.json files for install") { task ->
npmInstall.onlyIfCompat("No package.json files for install") { task ->
task as KotlinNpmInstallTask
task.preparedFiles.all { file ->
file.exists()
}
}
it.doNotTrackStateCompat("NPM package manager track by its own")
npmInstall.outputs.upToDateWhen {
npmInstall.nodeModules.exists()
}
}
project.registerTask<Task>(PACKAGE_JSON_UMBRELLA_TASK_NAME)
@@ -75,6 +75,8 @@ internal class GradleNodeModuleBuilder(
packageJson.main = "${name}.js"
}
packageJson.devDependencies.clear()
// yarn requires semver
packageJson.version = fixSemver(packageJson.version)
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.gradle.targets.js.npm.KotlinNpmResolutionManager
import org.jetbrains.kotlin.gradle.targets.js.npm.UsesKotlinNpmResolutionManager
import org.jetbrains.kotlin.gradle.targets.js.npm.asNpmEnvironment
import org.jetbrains.kotlin.gradle.targets.js.npm.asYarnEnvironment
import org.jetbrains.kotlin.gradle.targets.js.npm.resolver.KotlinRootNpmResolver
import org.jetbrains.kotlin.gradle.targets.js.yarn.yarn
import java.io.File
@@ -33,6 +34,9 @@ abstract class KotlinNpmInstallTask :
private val yarn
get() = project.rootProject.yarn
private val rootResolver: KotlinRootNpmResolver
get() = nodeJs.resolver
// -----
private val npmEnvironment by lazy {
@@ -54,11 +58,29 @@ abstract class KotlinNpmInstallTask :
nodeJs.packageManager.preparedFiles(npmEnvironment)
}
@get:PathSensitive(PathSensitivity.RELATIVE)
@get:IgnoreEmptyDirectories
@get:NormalizeLineEndings
@get:InputFiles
val packageJsonFiles: Collection<File> by lazy {
rootResolver.projectResolvers.values
.flatMap { it.compilationResolvers }
.map { it.compilationNpmResolution }
.map { it.npmProjectPackageJsonFile }
}
@get:OutputFile
val yarnLock: File by lazy {
nodeJs.rootPackageDir.resolve("yarn.lock")
}
// node_modules as OutputDirectory is performance problematic
// so input will only be existence of its directory
@get:Internal
val nodeModules: File by lazy {
nodeJs.rootPackageDir.resolve("node_modules")
}
@TaskAction
fun resolve() {
npmResolutionManager.get()