From 0199a25192a9b3e91e8b4320045e5a578abe0286 Mon Sep 17 00:00:00 2001 From: Michel Werren Date: Sun, 26 Aug 2018 21:57:35 +0200 Subject: [PATCH] #96 : Provide configuration for "no-bin-links" NPM option --- .../gradle/frontend/npm/NpmExtension.kt | 9 +++++- .../gradle/frontend/npm/NpmInstallTask.kt | 31 ++++++++++++++----- 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/kotlin-frontend/src/main/kotlin/org/jetbrains/kotlin/gradle/frontend/npm/NpmExtension.kt b/kotlin-frontend/src/main/kotlin/org/jetbrains/kotlin/gradle/frontend/npm/NpmExtension.kt index 2495e88..25a7989 100644 --- a/kotlin-frontend/src/main/kotlin/org/jetbrains/kotlin/gradle/frontend/npm/NpmExtension.kt +++ b/kotlin-frontend/src/main/kotlin/org/jetbrains/kotlin/gradle/frontend/npm/NpmExtension.kt @@ -1,6 +1,7 @@ package org.jetbrains.kotlin.gradle.frontend.npm -import org.jetbrains.kotlin.gradle.frontend.* +import org.gradle.api.tasks.Input +import org.jetbrains.kotlin.gradle.frontend.Dependency import java.util.* /** @@ -13,6 +14,12 @@ open class NpmExtension { val developmentDependencies: MutableList = ArrayList() + /** + * When [Boolean.false] npm install will avoid symlinks on binaries. + */ + @Input + var binLinks: Boolean = true + @JvmOverloads fun dependency(name: String, version: String = "*") { dependencies.add(Dependency(name, version, Dependency.RuntimeScope)) diff --git a/kotlin-frontend/src/main/kotlin/org/jetbrains/kotlin/gradle/frontend/npm/NpmInstallTask.kt b/kotlin-frontend/src/main/kotlin/org/jetbrains/kotlin/gradle/frontend/npm/NpmInstallTask.kt index 59b0fec..b74ca30 100644 --- a/kotlin-frontend/src/main/kotlin/org/jetbrains/kotlin/gradle/frontend/npm/NpmInstallTask.kt +++ b/kotlin-frontend/src/main/kotlin/org/jetbrains/kotlin/gradle/frontend/npm/NpmInstallTask.kt @@ -1,12 +1,18 @@ package org.jetbrains.kotlin.gradle.frontend.npm -import org.gradle.api.* -import org.gradle.api.tasks.* -import org.gradle.process.* -import org.jetbrains.kotlin.gradle.frontend.* -import org.jetbrains.kotlin.gradle.frontend.util.* -import java.io.* -import java.net.* +import org.gradle.api.DefaultTask +import org.gradle.api.tasks.InputFile +import org.gradle.api.tasks.Internal +import org.gradle.api.tasks.OutputDirectory +import org.gradle.api.tasks.TaskAction +import org.gradle.process.ExecSpec +import org.jetbrains.kotlin.gradle.frontend.Dependency +import org.jetbrains.kotlin.gradle.frontend.util.NodeJsDownloadTask +import org.jetbrains.kotlin.gradle.frontend.util.nodePath +import org.jetbrains.kotlin.gradle.frontend.util.readLinesOrEmpty +import org.jetbrains.kotlin.gradle.frontend.util.startWithRedirectOnFail +import java.io.File +import java.net.URI import java.nio.file.* /** @@ -16,6 +22,9 @@ open class NpmInstallTask : DefaultTask() { @InputFile lateinit var packageJsonFile: File + @Internal + private val npmExt = project.extensions.getByType(NpmExtension::class.java)!! + @Internal private val npmDirFile = project.tasks .filterIsInstance() @@ -50,7 +59,13 @@ open class NpmInstallTask : DefaultTask() { ensureSymbolicLink(linkPath, target) } - ProcessBuilder(npmPath, "install") + val command = if (npmExt.binLinks) { + arrayOf("install") + } else { + arrayOf("install", "--no-bin-links") + } + + ProcessBuilder(npmPath, *command) .directory(project.buildDir) .apply { ensurePath(environment(), npm.parentFile.absolutePath) } .redirectErrorStream(true)