From 149d7fb33a9d238088edbfad7b60cbaac7fe832b Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Mon, 30 Mar 2020 20:03:02 +0300 Subject: [PATCH] [Gradle, JS] KT-36784 Fix requireing of node modules #KT-32466 fixed #KT-36784 fixed #KT-36864 fixed --- .../kotlin/gradle/targets/js/npm/NpmProject.kt | 4 +--- .../gradle/targets/js/npm/NpmProjectModules.kt | 18 +++++------------- 2 files changed, 6 insertions(+), 16 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmProject.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmProject.kt index f1032ec0a3c..bca350d068b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmProject.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmProject.kt @@ -64,9 +64,7 @@ open class NpmProject(val compilation: KotlinJsCompilation) { val externalsDir: File get() = externalsDirRoot.resolve("src") - internal val modules = object : NpmProjectModules(dir, nodeModulesDir) { - override val parent get() = rootNodeModules - } + internal val modules = NpmProjectModules(dir) private val rootNodeModules: NpmProjectModules? get() = NpmProjectModules(nodeJs.rootPackageDir) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmProjectModules.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmProjectModules.kt index a4f247d9c3d..78bc6327118 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmProjectModules.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmProjectModules.kt @@ -14,9 +14,8 @@ import java.io.File /** * Search modules in node_modules according to https://nodejs.org/api/modules.html. */ -internal open class NpmProjectModules( +open class NpmProjectModules( val dir: File, - val nodeModulesDir: File = dir.resolve(NODE_MODULES), val packageJsonEntries: Collection = listOf("main", "module", "browser"), val indexFileNames: Collection = listOf(INDEX_FILE_NAME), val indexFileSuffixes: Collection = listOf(JS_SUFFIX) @@ -28,29 +27,22 @@ internal open class NpmProjectModules( return resolve(request)?.canonicalPath ?: error("Cannot find node module \"$request\" in \"$this\"") } - open val parent: NpmProjectModules? - get() = null - fun copy( packageJsonEntries: Collection = this.packageJsonEntries, indexFileNames: Collection = this.indexFileNames, indexFileSuffixes: Collection = this.indexFileSuffixes - ): NpmProjectModules = object : NpmProjectModules(dir, nodeModulesDir, packageJsonEntries, indexFileNames, indexFileSuffixes) { - override val parent: NpmProjectModules? - get() = this@NpmProjectModules.parent?.copy(packageJsonEntries, indexFileNames, indexFileSuffixes) - } + ): NpmProjectModules = NpmProjectModules(dir, packageJsonEntries, indexFileNames, indexFileSuffixes) /** - * Find node module according to https://nodejs.org/api/modules.html#modules_all_together, - * with exception that instead of traversing parent folders, we are traversing parent projects + * Find node module according to https://nodejs.org/api/modules.html#modules_all_together */ internal fun resolve(name: String, context: File = dir): File? = if (name.startsWith("/")) resolve(name.removePrefix("/"), File("/")) else resolveAsRelative("./", name, context) ?: resolveAsRelative("/", name, context) ?: resolveAsRelative("../", name, context) - ?: resolveInNodeModulesDir(name, nodeModulesDir) - ?: parent?.resolve(name) + ?: resolveInNodeModulesDir(name, context.resolve(NODE_MODULES)) + ?: context.parentFile?.let { resolve(name, it) } private fun resolveAsRelative(prefix: String, name: String, context: File): File? { if (!name.startsWith(prefix)) return null