[Gradle, JS] KT-36784 Fix requireing of node modules
#KT-32466 fixed #KT-36784 fixed #KT-36864 fixed
This commit is contained in:
+1
-3
@@ -64,9 +64,7 @@ open class NpmProject(val compilation: KotlinJsCompilation) {
|
|||||||
val externalsDir: File
|
val externalsDir: File
|
||||||
get() = externalsDirRoot.resolve("src")
|
get() = externalsDirRoot.resolve("src")
|
||||||
|
|
||||||
internal val modules = object : NpmProjectModules(dir, nodeModulesDir) {
|
internal val modules = NpmProjectModules(dir)
|
||||||
override val parent get() = rootNodeModules
|
|
||||||
}
|
|
||||||
|
|
||||||
private val rootNodeModules: NpmProjectModules?
|
private val rootNodeModules: NpmProjectModules?
|
||||||
get() = NpmProjectModules(nodeJs.rootPackageDir)
|
get() = NpmProjectModules(nodeJs.rootPackageDir)
|
||||||
|
|||||||
+5
-13
@@ -14,9 +14,8 @@ import java.io.File
|
|||||||
/**
|
/**
|
||||||
* Search modules in node_modules according to https://nodejs.org/api/modules.html.
|
* Search modules in node_modules according to https://nodejs.org/api/modules.html.
|
||||||
*/
|
*/
|
||||||
internal open class NpmProjectModules(
|
open class NpmProjectModules(
|
||||||
val dir: File,
|
val dir: File,
|
||||||
val nodeModulesDir: File = dir.resolve(NODE_MODULES),
|
|
||||||
val packageJsonEntries: Collection<String> = listOf("main", "module", "browser"),
|
val packageJsonEntries: Collection<String> = listOf("main", "module", "browser"),
|
||||||
val indexFileNames: Collection<String> = listOf(INDEX_FILE_NAME),
|
val indexFileNames: Collection<String> = listOf(INDEX_FILE_NAME),
|
||||||
val indexFileSuffixes: Collection<String> = listOf(JS_SUFFIX)
|
val indexFileSuffixes: Collection<String> = listOf(JS_SUFFIX)
|
||||||
@@ -28,29 +27,22 @@ internal open class NpmProjectModules(
|
|||||||
return resolve(request)?.canonicalPath ?: error("Cannot find node module \"$request\" in \"$this\"")
|
return resolve(request)?.canonicalPath ?: error("Cannot find node module \"$request\" in \"$this\"")
|
||||||
}
|
}
|
||||||
|
|
||||||
open val parent: NpmProjectModules?
|
|
||||||
get() = null
|
|
||||||
|
|
||||||
fun copy(
|
fun copy(
|
||||||
packageJsonEntries: Collection<String> = this.packageJsonEntries,
|
packageJsonEntries: Collection<String> = this.packageJsonEntries,
|
||||||
indexFileNames: Collection<String> = this.indexFileNames,
|
indexFileNames: Collection<String> = this.indexFileNames,
|
||||||
indexFileSuffixes: Collection<String> = this.indexFileSuffixes
|
indexFileSuffixes: Collection<String> = this.indexFileSuffixes
|
||||||
): NpmProjectModules = object : NpmProjectModules(dir, nodeModulesDir, packageJsonEntries, indexFileNames, indexFileSuffixes) {
|
): NpmProjectModules = NpmProjectModules(dir, packageJsonEntries, indexFileNames, indexFileSuffixes)
|
||||||
override val parent: NpmProjectModules?
|
|
||||||
get() = this@NpmProjectModules.parent?.copy(packageJsonEntries, indexFileNames, indexFileSuffixes)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Find node module according to https://nodejs.org/api/modules.html#modules_all_together,
|
* 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
|
|
||||||
*/
|
*/
|
||||||
internal fun resolve(name: String, context: File = dir): File? =
|
internal fun resolve(name: String, context: File = dir): File? =
|
||||||
if (name.startsWith("/")) resolve(name.removePrefix("/"), File("/"))
|
if (name.startsWith("/")) resolve(name.removePrefix("/"), File("/"))
|
||||||
else resolveAsRelative("./", name, context)
|
else resolveAsRelative("./", name, context)
|
||||||
?: resolveAsRelative("/", name, context)
|
?: resolveAsRelative("/", name, context)
|
||||||
?: resolveAsRelative("../", name, context)
|
?: resolveAsRelative("../", name, context)
|
||||||
?: resolveInNodeModulesDir(name, nodeModulesDir)
|
?: resolveInNodeModulesDir(name, context.resolve(NODE_MODULES))
|
||||||
?: parent?.resolve(name)
|
?: context.parentFile?.let { resolve(name, it) }
|
||||||
|
|
||||||
private fun resolveAsRelative(prefix: String, name: String, context: File): File? {
|
private fun resolveAsRelative(prefix: String, name: String, context: File): File? {
|
||||||
if (!name.startsWith(prefix)) return null
|
if (!name.startsWith(prefix)) return null
|
||||||
|
|||||||
Reference in New Issue
Block a user