From 174fd5975dd343f4c19045500c811baa51aa4220 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Thu, 17 Oct 2019 17:41:45 +0300 Subject: [PATCH] [Gradle, JS] Add resolveFromModulesFirst option When we collect all DCE'd files, we need, that webpack to watch on these files, not on node_modules module --- .../targets/js/subtargets/KotlinBrowserJs.kt | 2 ++ .../gradle/targets/js/webpack/KotlinWebpack.kt | 6 +++++- .../targets/js/webpack/KotlinWebpackConfig.kt | 17 ++++++++++++++++- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt index d527ebbfb96..8115e1084e1 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt @@ -96,6 +96,7 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) : when (kind) { BuildVariantKind.RELEASE -> { + it.resolveFromModulesFirst = true it.dependsOn(dceTask) } BuildVariantKind.DEBUG -> { @@ -139,6 +140,7 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) : when (kind) { BuildVariantKind.RELEASE -> { + it.resolveFromModulesFirst = true it.dependsOn(dceTask) project.tasks.getByName(LifecycleBasePlugin.ASSEMBLE_TASK_NAME).dependsOn(it) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt index c2854995fee..91032f486da 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt @@ -56,6 +56,9 @@ open class KotlinWebpack : DefaultTask(), RequiresNpmDependencies { val entry: File get() = compilation.compileKotlinTask.outputFile + @Input + var resolveFromModulesFirst: Boolean = false + @Suppress("unused") val runtimeClasspath: FileCollection @InputFiles get() = compilation.compileDependencyFiles @@ -126,7 +129,8 @@ open class KotlinWebpack : DefaultTask(), RequiresNpmDependencies { bundleAnalyzerReportDir = if (report) reportDir else null, devServer = devServer, devtool = devtool, - sourceMaps = sourceMaps + sourceMaps = sourceMaps, + resolveFromModulesFirst = resolveFromModulesFirst ) ) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackConfig.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackConfig.kt index 51183476e4b..b967f3e0224 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackConfig.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackConfig.kt @@ -31,7 +31,8 @@ data class KotlinWebpackConfig( val sourceMaps: Boolean = false, val export: Boolean = true, val progressReporter: Boolean = false, - val progressReporterPathFilter: String? = null + val progressReporterPathFilter: String? = null, + val resolveFromModulesFirst: Boolean = false ) { fun getRequiredDependencies(versions: NpmVersions) = mutableListOf().also { @@ -110,6 +111,7 @@ data class KotlinWebpackConfig( ) appendEntry() + appendResolveModules() appendSourceMaps() appendDevServer() appendReport() @@ -219,6 +221,19 @@ data class KotlinWebpackConfig( ) } + private fun Appendable.appendResolveModules() { + if (!resolveFromModulesFirst || entry == null || entry.parent == null) return + + //language=JavaScript 1.8 + appendln( + """ + // resolve modules + config.resolve.modules.unshift(${entry.parent.jsQuoted()}) + + """.trimIndent() + ) + } + private fun Appendable.appendProgressReporter() { if (!progressReporter) return