Gradle, js, karma: require webpack npm dependencies
This commit is contained in:
+2
-2
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBrowserDsl
|
||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
|
||||
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
|
||||
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpack
|
||||
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfigWriter
|
||||
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig
|
||||
import org.jetbrains.kotlin.gradle.tasks.createOrRegisterTask
|
||||
|
||||
class KotlinBrowserJs(target: KotlinJsTarget) :
|
||||
@@ -67,7 +67,7 @@ class KotlinBrowserJs(target: KotlinJsTarget) :
|
||||
it.compilation = compilation
|
||||
it.description = "start webpack dev server"
|
||||
|
||||
it.devServer = KotlinWebpackConfigWriter.DevServer(
|
||||
it.devServer = KotlinWebpackConfig.DevServer(
|
||||
open = true,
|
||||
contentBase = listOf(compilation.output.resourcesDir.canonicalPath)
|
||||
)
|
||||
|
||||
+11
-8
@@ -25,7 +25,7 @@ import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
|
||||
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
|
||||
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTestFramework
|
||||
import org.jetbrains.kotlin.gradle.targets.js.testing.karma.KarmaConfig.CoverageReporter.Reporter
|
||||
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfigWriter
|
||||
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig
|
||||
import org.jetbrains.kotlin.gradle.testing.internal.reportsDir
|
||||
import org.slf4j.Logger
|
||||
import java.io.File
|
||||
@@ -108,19 +108,22 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : KotlinJsTestF
|
||||
requiredDependencies.add(versions.karmaWebpack)
|
||||
requiredDependencies.add(versions.webpack)
|
||||
|
||||
val webpackConfigWriter = KotlinWebpackConfig(
|
||||
configDirectory = project.projectDir.resolve("webpack.config.d").takeIf { it.isDirectory },
|
||||
sourceMaps = true,
|
||||
export = false,
|
||||
progressReporter = true,
|
||||
progressReporterPathFilter = nodeJs.rootPackageDir.absolutePath
|
||||
)
|
||||
requiredDependencies.addAll(webpackConfigWriter.getRequiredDependencies(versions))
|
||||
|
||||
addPreprocessor("webpack")
|
||||
confJsWriters.add {
|
||||
it.appendln()
|
||||
it.appendln("// webpack config")
|
||||
it.appendln("function createWebpackConfig() {")
|
||||
|
||||
KotlinWebpackConfigWriter(
|
||||
configDirectory = project.projectDir.resolve("webpack.config.d").takeIf { it.isDirectory },
|
||||
sourceMaps = true,
|
||||
export = false,
|
||||
progressReporter = true,
|
||||
progressReporterPathFilter = nodeJs.rootPackageDir.absolutePath
|
||||
).appendTo(it)
|
||||
webpackConfigWriter.appendTo(it)
|
||||
|
||||
it.appendln(" return config;")
|
||||
it.appendln("}")
|
||||
|
||||
+4
-20
@@ -102,14 +102,14 @@ open class KotlinWebpack : DefaultTask(), RequiresNpmDependencies {
|
||||
|
||||
@Input
|
||||
@Optional
|
||||
var devServer: KotlinWebpackConfigWriter.DevServer? = null
|
||||
var devServer: KotlinWebpackConfig.DevServer? = null
|
||||
|
||||
private fun createRunner() = KotlinWebpackRunner(
|
||||
compilation.npmProject,
|
||||
configFile,
|
||||
execHandleFactory,
|
||||
bin,
|
||||
KotlinWebpackConfigWriter(
|
||||
KotlinWebpackConfig(
|
||||
entry = entry,
|
||||
reportEvaluatedConfigFile = if (saveEvaluatedConfigFile) evaluatedConfigFile else null,
|
||||
outputPath = destinationDirectory,
|
||||
@@ -126,23 +126,7 @@ open class KotlinWebpack : DefaultTask(), RequiresNpmDependencies {
|
||||
@Internal get() = true
|
||||
|
||||
override val requiredNpmDependencies: Collection<NpmPackageVersion>
|
||||
@Internal get() = mutableListOf<NpmPackageVersion>().also {
|
||||
it.add(versions.webpack)
|
||||
it.add(versions.webpackCli)
|
||||
|
||||
if (report) {
|
||||
it.add(versions.webpackBundleAnalyzer)
|
||||
}
|
||||
|
||||
if (sourceMaps) {
|
||||
it.add(versions.sourceMapLoader)
|
||||
it.add(versions.sourceMapSupport)
|
||||
}
|
||||
|
||||
if (devServer != null) {
|
||||
it.add(versions.webpackDevServer)
|
||||
}
|
||||
}
|
||||
@Internal get() = createRunner().config.getRequiredDependencies(versions)
|
||||
|
||||
@TaskAction
|
||||
fun doExecute() {
|
||||
@@ -160,7 +144,7 @@ open class KotlinWebpack : DefaultTask(), RequiresNpmDependencies {
|
||||
}
|
||||
} else {
|
||||
runner.copy(
|
||||
configWriter = runner.configWriter.copy(
|
||||
config = runner.config.copy(
|
||||
progressReporter = true,
|
||||
progressReporterPathFilter = nodeJs.rootPackageDir.absolutePath
|
||||
)
|
||||
|
||||
+21
-1
@@ -9,13 +9,15 @@ package org.jetbrains.kotlin.gradle.targets.js.webpack
|
||||
|
||||
import com.google.gson.GsonBuilder
|
||||
import com.google.gson.stream.JsonWriter
|
||||
import org.jetbrains.kotlin.gradle.targets.js.NpmPackageVersion
|
||||
import org.jetbrains.kotlin.gradle.targets.js.NpmVersions
|
||||
import org.jetbrains.kotlin.gradle.targets.js.appendConfigsFromDir
|
||||
import java.io.File
|
||||
import java.io.Serializable
|
||||
import java.io.StringWriter
|
||||
|
||||
@Suppress("MemberVisibilityCanBePrivate")
|
||||
data class KotlinWebpackConfigWriter(
|
||||
data class KotlinWebpackConfig(
|
||||
val mode: Mode = Mode.DEVELOPMENT,
|
||||
val entry: File? = null,
|
||||
val outputPath: File? = null,
|
||||
@@ -31,6 +33,24 @@ data class KotlinWebpackConfigWriter(
|
||||
val progressReporter: Boolean = false,
|
||||
val progressReporterPathFilter: String? = null
|
||||
) {
|
||||
fun getRequiredDependencies(versions: NpmVersions) = mutableListOf<NpmPackageVersion>().also {
|
||||
it.add(versions.webpack)
|
||||
it.add(versions.webpackCli)
|
||||
|
||||
if (bundleAnalyzerReportDir != null) {
|
||||
it.add(versions.webpackBundleAnalyzer)
|
||||
}
|
||||
|
||||
if (sourceMaps) {
|
||||
it.add(versions.sourceMapLoader)
|
||||
it.add(versions.sourceMapSupport)
|
||||
}
|
||||
|
||||
if (devServer != null) {
|
||||
it.add(versions.webpackDevServer)
|
||||
}
|
||||
}
|
||||
|
||||
enum class Mode(val code: String) {
|
||||
DEVELOPMENT("development"),
|
||||
PRODUCTION("production")
|
||||
+5
-5
@@ -17,7 +17,7 @@ internal data class KotlinWebpackRunner(
|
||||
val configFile: File,
|
||||
val execHandleFactory: ExecHandleFactory,
|
||||
val tool: String,
|
||||
val configWriter: KotlinWebpackConfigWriter
|
||||
val config: KotlinWebpackConfig
|
||||
) {
|
||||
fun execute() = npmProject.project.execWithProgress("webpack") {
|
||||
configureExec(it)
|
||||
@@ -32,14 +32,14 @@ internal data class KotlinWebpackRunner(
|
||||
}
|
||||
|
||||
private fun configureExec(execFactory: ExecSpec) {
|
||||
check(configWriter.entry?.isFile == true) {
|
||||
"${this}: Entry file not existed \"${configWriter.entry}\""
|
||||
check(config.entry?.isFile == true) {
|
||||
"${this}: Entry file not existed \"${config.entry}\""
|
||||
}
|
||||
|
||||
configWriter.save(configFile)
|
||||
config.save(configFile)
|
||||
|
||||
val args = mutableListOf<String>("--config", configFile.absolutePath)
|
||||
if (configWriter.showProgress) {
|
||||
if (config.showProgress) {
|
||||
args.add("--progress")
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user