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)