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 dbf19d58752..43b67bd30df 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 @@ -13,7 +13,6 @@ import org.gradle.deployment.internal.DeploymentHandle import org.gradle.deployment.internal.DeploymentRegistry import org.gradle.process.internal.ExecHandle import org.gradle.process.internal.ExecHandleFactory -import org.gradle.process.internal.ExecHandleState import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationToRunnableFiles import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile @@ -60,6 +59,9 @@ open class KotlinWebpack : DefaultTask() { @Input var bin: String = "webpack" + @Input + var sourceMaps: Boolean = true + @Input @Optional var devServer: KotlinWebpackConfig.DevServer? = null @@ -75,7 +77,8 @@ open class KotlinWebpack : DefaultTask() { outputPath, configDirectory, if (report) reportDir else null, - devServer + devServer, + sourceMaps = sourceMaps ) ) @@ -117,6 +120,10 @@ open class KotlinWebpack : DefaultTask() { runtimeOnly(npm("webpack", "4.29.6")) runtimeOnly(npm("webpack-cli", "3.3.0")) runtimeOnly(npm("webpack-bundle-analyzer", "3.3.2")) + + // for source map support only + runtimeOnly(npm("source-map-loader", "0.2.4")) + runtimeOnly(npm("source-map-support", "0.5.12")) } project.createOrRegisterTask("webpack") { 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 cc54ceff197..08fda7fcc27 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 @@ -21,7 +21,8 @@ class KotlinWebpackConfig( val configDirectory: File, val reportDir: File?, var devServer: DevServer? = null, - val showProgress: Boolean = false + val showProgress: Boolean = false, + val sourceMaps: Boolean = false ) { @Suppress("unused") data class BundleAnalyzerPlugin( @@ -54,7 +55,7 @@ class KotlinWebpackConfig( """ var config = { mode: 'development', - entry: '${entry.canonicalPath}', + entry: ['${entry.canonicalPath}'], output: { path: '${outputPath.canonicalPath}', filename: '${entry.name}' @@ -66,12 +67,29 @@ var config = { }, plugins: [], module: { - rules: [] - } -};""" + rules: [ + { + test: /\.js${'$'}/, + use: ["source-map-loader"], + enforce: "pre" + } + ] + }, + devtool: 'eval-source-map' +};""".trim() ) appendln() + if (sourceMaps) { + //language=JavaScript 1.8 + appendln(""" +// source maps +config.entry.push('source-map-support/browser-source-map-support.js'); +config.module.rules.push({test: /\.js${'$'}/, use: ['source-map-loader'], enforce: 'pre'}); + """.trim()) + appendln() + } + if (devServer != null) { appendln("// dev server") appendln("config.devServer = ${json(devServer!!)};") @@ -80,7 +98,7 @@ var config = { if (reportDir != null) { val reportBasePath = "${reportDir.canonicalPath}/${entry.name}" - val config = KotlinWebpackConfig.BundleAnalyzerPlugin( + val config = BundleAnalyzerPlugin( "static", "$reportBasePath.report.html", false,