[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
This commit is contained in:
Ilya Goncharov
2019-10-17 17:41:45 +03:00
parent 51f4dc5af0
commit 174fd5975d
3 changed files with 23 additions and 2 deletions
@@ -96,6 +96,7 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) :
when (kind) { when (kind) {
BuildVariantKind.RELEASE -> { BuildVariantKind.RELEASE -> {
it.resolveFromModulesFirst = true
it.dependsOn(dceTask) it.dependsOn(dceTask)
} }
BuildVariantKind.DEBUG -> { BuildVariantKind.DEBUG -> {
@@ -139,6 +140,7 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) :
when (kind) { when (kind) {
BuildVariantKind.RELEASE -> { BuildVariantKind.RELEASE -> {
it.resolveFromModulesFirst = true
it.dependsOn(dceTask) it.dependsOn(dceTask)
project.tasks.getByName(LifecycleBasePlugin.ASSEMBLE_TASK_NAME).dependsOn(it) project.tasks.getByName(LifecycleBasePlugin.ASSEMBLE_TASK_NAME).dependsOn(it)
} }
@@ -56,6 +56,9 @@ open class KotlinWebpack : DefaultTask(), RequiresNpmDependencies {
val entry: File val entry: File
get() = compilation.compileKotlinTask.outputFile get() = compilation.compileKotlinTask.outputFile
@Input
var resolveFromModulesFirst: Boolean = false
@Suppress("unused") @Suppress("unused")
val runtimeClasspath: FileCollection val runtimeClasspath: FileCollection
@InputFiles get() = compilation.compileDependencyFiles @InputFiles get() = compilation.compileDependencyFiles
@@ -126,7 +129,8 @@ open class KotlinWebpack : DefaultTask(), RequiresNpmDependencies {
bundleAnalyzerReportDir = if (report) reportDir else null, bundleAnalyzerReportDir = if (report) reportDir else null,
devServer = devServer, devServer = devServer,
devtool = devtool, devtool = devtool,
sourceMaps = sourceMaps sourceMaps = sourceMaps,
resolveFromModulesFirst = resolveFromModulesFirst
) )
) )
@@ -31,7 +31,8 @@ data class KotlinWebpackConfig(
val sourceMaps: Boolean = false, val sourceMaps: Boolean = false,
val export: Boolean = true, val export: Boolean = true,
val progressReporter: Boolean = false, val progressReporter: Boolean = false,
val progressReporterPathFilter: String? = null val progressReporterPathFilter: String? = null,
val resolveFromModulesFirst: Boolean = false
) { ) {
fun getRequiredDependencies(versions: NpmVersions) = fun getRequiredDependencies(versions: NpmVersions) =
mutableListOf<RequiredKotlinJsDependency>().also { mutableListOf<RequiredKotlinJsDependency>().also {
@@ -110,6 +111,7 @@ data class KotlinWebpackConfig(
) )
appendEntry() appendEntry()
appendResolveModules()
appendSourceMaps() appendSourceMaps()
appendDevServer() appendDevServer()
appendReport() 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() { private fun Appendable.appendProgressReporter() {
if (!progressReporter) return if (!progressReporter) return