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