[Gradle, JS] Watch options ignore kt file to not trigger webpack
[Gradle, JS] Webpack prod dist not in default dist dir ^KT-57629 fixed ^KT-57630 fixed
This commit is contained in:
committed by
Space Team
parent
4fabe8b29a
commit
95d33da10d
+12
-3
@@ -12,6 +12,7 @@ import org.gradle.api.logging.LogLevel
|
|||||||
import org.gradle.testkit.runner.BuildResult
|
import org.gradle.testkit.runner.BuildResult
|
||||||
import org.gradle.util.GradleVersion
|
import org.gradle.util.GradleVersion
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinJsCompilerType
|
import org.jetbrains.kotlin.gradle.plugin.KotlinJsCompilerType
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.Distribution
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.ir.KLIB_TYPE
|
import org.jetbrains.kotlin.gradle.targets.js.ir.KLIB_TYPE
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProject
|
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProject
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProjectModules
|
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProjectModules
|
||||||
@@ -361,7 +362,7 @@ class Kotlin2JsIrGradlePluginIT : AbstractKotlin2JsGradlePluginIT(true) {
|
|||||||
fun testKotlinJsPackageModuleName(gradleVersion: GradleVersion) {
|
fun testKotlinJsPackageModuleName(gradleVersion: GradleVersion) {
|
||||||
project("kotlin-js-package-module-name", gradleVersion) {
|
project("kotlin-js-package-module-name", gradleVersion) {
|
||||||
build("assemble") {
|
build("assemble") {
|
||||||
assertFileInProjectExists("build/distributions/kotlin-js-package-module-name.js")
|
assertFileInProjectExists("build/${Distribution.JS_DIST}/productionExecutable/kotlin-js-package-module-name.js")
|
||||||
assertFileInProjectExists("build/js/packages/@foo/bar/kotlin/@foo/bar.js")
|
assertFileInProjectExists("build/js/packages/@foo/bar/kotlin/@foo/bar.js")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1147,7 +1148,11 @@ abstract class AbstractKotlin2JsGradlePluginIT(protected val irBackend: Boolean)
|
|||||||
assertDirectoryInProjectExists("build/js/packages/kotlin-js-browser-lib")
|
assertDirectoryInProjectExists("build/js/packages/kotlin-js-browser-lib")
|
||||||
assertDirectoryInProjectExists("build/js/packages/kotlin-js-browser-app")
|
assertDirectoryInProjectExists("build/js/packages/kotlin-js-browser-app")
|
||||||
|
|
||||||
assertFileInProjectExists("app/build/distributions/app.js")
|
if (irBackend) {
|
||||||
|
assertFileInProjectExists("app/build/${Distribution.JS_DIST}/productionExecutable/app.js")
|
||||||
|
} else {
|
||||||
|
assertFileInProjectExists("app/build/distributions/app.js")
|
||||||
|
}
|
||||||
|
|
||||||
if (!irBackend) {
|
if (!irBackend) {
|
||||||
assertTasksExecuted(":app:processDceKotlinJs")
|
assertTasksExecuted(":app:processDceKotlinJs")
|
||||||
@@ -1169,7 +1174,11 @@ abstract class AbstractKotlin2JsGradlePluginIT(protected val irBackend: Boolean)
|
|||||||
if (irBackend) ":app:browserProductionExecutableDistributeResources" else ":app:browserDistributeResources"
|
if (irBackend) ":app:browserProductionExecutableDistributeResources" else ":app:browserDistributeResources"
|
||||||
)
|
)
|
||||||
|
|
||||||
assertFileInProjectExists("app/build/distributions/index.html")
|
if (irBackend) {
|
||||||
|
assertFileInProjectExists("app/build/${Distribution.JS_DIST}/productionExecutable/index.html")
|
||||||
|
} else {
|
||||||
|
assertFileInProjectExists("app/build/distributions/index.html")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+12
-11
@@ -9,6 +9,7 @@ import com.google.gson.Gson
|
|||||||
import com.google.gson.JsonObject
|
import com.google.gson.JsonObject
|
||||||
import org.gradle.util.GradleVersion
|
import org.gradle.util.GradleVersion
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinJsCompilerType
|
import org.jetbrains.kotlin.gradle.plugin.KotlinJsCompilerType
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.Distribution.Companion.JS_DIST
|
||||||
import org.jetbrains.kotlin.gradle.testbase.*
|
import org.jetbrains.kotlin.gradle.testbase.*
|
||||||
import org.junit.jupiter.api.DisplayName
|
import org.junit.jupiter.api.DisplayName
|
||||||
import java.util.zip.ZipFile
|
import java.util.zip.ZipFile
|
||||||
@@ -31,10 +32,10 @@ abstract class KotlinJsIrLibraryGradlePluginITBase : KGPBaseTest() {
|
|||||||
fun testSimpleJsBinaryLibrary(gradleVersion: GradleVersion) {
|
fun testSimpleJsBinaryLibrary(gradleVersion: GradleVersion) {
|
||||||
project("simple-js-library", gradleVersion) {
|
project("simple-js-library", gradleVersion) {
|
||||||
build("build") {
|
build("build") {
|
||||||
assertFileInProjectExists("build/productionLibrary/js-library.js")
|
assertFileInProjectExists("build/$JS_DIST/productionLibrary/js-library.js")
|
||||||
assertFileInProjectExists("build/productionLibrary/package.json")
|
assertFileInProjectExists("build/$JS_DIST/productionLibrary/package.json")
|
||||||
assertFileInProjectExists("build/productionLibrary/main.js")
|
assertFileInProjectExists("build/$JS_DIST/productionLibrary/main.js")
|
||||||
projectPath.resolve("build/productionLibrary/package.json").reader()
|
projectPath.resolve("build/$JS_DIST/productionLibrary/package.json").reader()
|
||||||
.use { Gson().fromJson(it, JsonObject::class.java) }
|
.use { Gson().fromJson(it, JsonObject::class.java) }
|
||||||
.getAsJsonObject("dependencies")
|
.getAsJsonObject("dependencies")
|
||||||
?.entrySet()?.associate { (k, v) -> k to v.asString }
|
?.entrySet()?.associate { (k, v) -> k to v.asString }
|
||||||
@@ -51,9 +52,9 @@ abstract class KotlinJsIrLibraryGradlePluginITBase : KGPBaseTest() {
|
|||||||
fun testJsBinaryLibraryAndExecutable(gradleVersion: GradleVersion) {
|
fun testJsBinaryLibraryAndExecutable(gradleVersion: GradleVersion) {
|
||||||
project("js-library-with-executable", gradleVersion) {
|
project("js-library-with-executable", gradleVersion) {
|
||||||
build("build") {
|
build("build") {
|
||||||
assertFileInProjectExists("build/productionLibrary/js-library.js")
|
assertFileInProjectExists("build/$JS_DIST/productionLibrary/js-library.js")
|
||||||
assertFileInProjectExists("build/productionLibrary/package.json")
|
assertFileInProjectExists("build/$JS_DIST/productionLibrary/package.json")
|
||||||
assertFileInProjectExists("build/productionLibrary/main.js")
|
assertFileInProjectExists("build/$JS_DIST/productionLibrary/main.js")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -63,11 +64,11 @@ abstract class KotlinJsIrLibraryGradlePluginITBase : KGPBaseTest() {
|
|||||||
fun testJsBinaryLibraryAndExecutableForBrowserAndNodejs(gradleVersion: GradleVersion) {
|
fun testJsBinaryLibraryAndExecutableForBrowserAndNodejs(gradleVersion: GradleVersion) {
|
||||||
project("js-library-with-executable-browser-nodejs", gradleVersion) {
|
project("js-library-with-executable-browser-nodejs", gradleVersion) {
|
||||||
build("build") {
|
build("build") {
|
||||||
assertFileInProjectExists("build/productionLibrary/js-library.js")
|
assertFileInProjectExists("build/$JS_DIST/productionLibrary/js-library.js")
|
||||||
assertFileInProjectExists("build/productionLibrary/package.json")
|
assertFileInProjectExists("build/$JS_DIST/productionLibrary/package.json")
|
||||||
assertFileInProjectExists("build/productionLibrary/main.js")
|
assertFileInProjectExists("build/$JS_DIST/productionLibrary/main.js")
|
||||||
|
|
||||||
assertFileInProjectExists("build/distributions/js-library.js")
|
assertFileInProjectExists("build/$JS_DIST/productionExecutable/js-library.js")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-2
@@ -60,11 +60,12 @@ rootProject.plugins.withType<org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJ
|
|||||||
val kotlinNodeJs = rootProject.extensions.getByType<org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension>()
|
val kotlinNodeJs = rootProject.extensions.getByType<org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension>()
|
||||||
|
|
||||||
tasks.register<Exec>("runWebpackResult") {
|
tasks.register<Exec>("runWebpackResult") {
|
||||||
dependsOn(tasks.named("browserProductionWebpack"))
|
val webpackTask = tasks.named<org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpack>("browserProductionWebpack")
|
||||||
|
dependsOn(webpackTask)
|
||||||
|
|
||||||
executable(kotlinNodeJs.requireConfigured().nodeExecutable)
|
executable(kotlinNodeJs.requireConfigured().nodeExecutable)
|
||||||
|
|
||||||
workingDir = File("${buildDir}").resolve("distributions")
|
workingDir(webpackTask.flatMap { it.outputDirectory.asFile })
|
||||||
args("./${project.name}.js")
|
args("./${project.name}.js")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+4
@@ -19,4 +19,8 @@ interface Distribution {
|
|||||||
var directory: File
|
var directory: File
|
||||||
|
|
||||||
val outputDirectory: DirectoryProperty
|
val outputDirectory: DirectoryProperty
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val JS_DIST = "js-dist"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+1
-1
@@ -95,7 +95,7 @@ class Executable(
|
|||||||
override val distribution: Distribution =
|
override val distribution: Distribution =
|
||||||
createDefaultDistribution(
|
createDefaultDistribution(
|
||||||
compilation.target.project,
|
compilation.target.project,
|
||||||
if (mode == KotlinJsBinaryMode.PRODUCTION) null else super.distribution.distributionName
|
super.distribution.distributionName
|
||||||
)
|
)
|
||||||
|
|
||||||
val executeTaskBaseName: String =
|
val executeTaskBaseName: String =
|
||||||
|
|||||||
+4
-3
@@ -15,7 +15,6 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinJsDce
|
|||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.archivesName
|
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.archivesName
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.distsDirectory
|
|
||||||
import org.jetbrains.kotlin.gradle.report.BuildMetricsService
|
import org.jetbrains.kotlin.gradle.report.BuildMetricsService
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalDceDsl
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalDceDsl
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode
|
||||||
@@ -114,7 +113,6 @@ abstract class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) :
|
|||||||
binary as Executable
|
binary as Executable
|
||||||
|
|
||||||
val mode = binary.mode
|
val mode = binary.mode
|
||||||
val distsDirectory = project.distsDirectory
|
|
||||||
val archivesName = project.archivesName
|
val archivesName = project.archivesName
|
||||||
|
|
||||||
val runTask = registerSubTargetTask<KotlinWebpack>(
|
val runTask = registerSubTargetTask<KotlinWebpack>(
|
||||||
@@ -125,7 +123,6 @@ abstract class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) :
|
|||||||
listOf(compilation)
|
listOf(compilation)
|
||||||
) { task ->
|
) { task ->
|
||||||
task.dependsOn(binary.linkSyncTask)
|
task.dependsOn(binary.linkSyncTask)
|
||||||
task.outputDirectory.convention(distsDirectory).finalizeValueOnRead()
|
|
||||||
|
|
||||||
task.args.add(0, "serve")
|
task.args.add(0, "serve")
|
||||||
task.description = "start ${mode.name.toLowerCaseAsciiOnly()} webpack dev server"
|
task.description = "start ${mode.name.toLowerCaseAsciiOnly()} webpack dev server"
|
||||||
@@ -145,6 +142,10 @@ abstract class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) :
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
task.watchOptions = KotlinWebpackConfig.WatchOptions(
|
||||||
|
ignored = arrayOf("*.kt")
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
task.doNotTrackStateCompat("Tracked by external webpack tool")
|
task.doNotTrackStateCompat("Tracked by external webpack tool")
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -10,6 +10,7 @@ import org.gradle.api.file.DirectoryProperty
|
|||||||
import org.gradle.api.provider.Property
|
import org.gradle.api.provider.Property
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.distsDirectory
|
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.distsDirectory
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.Distribution
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.Distribution
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.Distribution.Companion.JS_DIST
|
||||||
import org.jetbrains.kotlin.gradle.utils.property
|
import org.jetbrains.kotlin.gradle.utils.property
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
@@ -42,6 +43,6 @@ class DefaultDistribution(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override val outputDirectory: DirectoryProperty = project.objects.directoryProperty().convention(
|
override val outputDirectory: DirectoryProperty = project.objects.directoryProperty().convention(
|
||||||
distributionName.flatMap { project.layout.buildDirectory.dir(it) }.orElse(project.distsDirectory)
|
distributionName.flatMap { project.layout.buildDirectory.dir("$JS_DIST/$it") }.orElse(project.distsDirectory)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-3
@@ -26,7 +26,6 @@ import org.jetbrains.kotlin.build.report.metrics.BuildMetricsReporter
|
|||||||
import org.jetbrains.kotlin.build.report.metrics.BuildMetricsReporterImpl
|
import org.jetbrains.kotlin.build.report.metrics.BuildMetricsReporterImpl
|
||||||
import org.jetbrains.kotlin.build.report.metrics.BuildPerformanceMetric
|
import org.jetbrains.kotlin.build.report.metrics.BuildPerformanceMetric
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.archivesName
|
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.archivesName
|
||||||
import org.jetbrains.kotlin.gradle.report.UsesBuildMetricsService
|
import org.jetbrains.kotlin.gradle.report.UsesBuildMetricsService
|
||||||
@@ -34,7 +33,6 @@ import org.jetbrains.kotlin.gradle.targets.js.RequiredKotlinJsDependency
|
|||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinWebpackRulesContainer
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinWebpackRulesContainer
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.WebpackRulesDsl
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.WebpackRulesDsl
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.WebpackRulesDsl.Companion.webpackRulesContainer
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.WebpackRulesDsl.Companion.webpackRulesContainer
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
|
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin.Companion.kotlinNodeJsExtension
|
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin.Companion.kotlinNodeJsExtension
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.RequiresNpmDependencies
|
import org.jetbrains.kotlin.gradle.targets.js.npm.RequiresNpmDependencies
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
|
import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
|
||||||
@@ -148,6 +146,7 @@ constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
@get:OutputDirectory
|
@get:OutputDirectory
|
||||||
|
@get:Optional
|
||||||
abstract val outputDirectory: DirectoryProperty
|
abstract val outputDirectory: DirectoryProperty
|
||||||
|
|
||||||
@get:Internal
|
@get:Internal
|
||||||
@@ -195,6 +194,10 @@ constructor(
|
|||||||
@Optional
|
@Optional
|
||||||
var devServer: KotlinWebpackConfig.DevServer? = null
|
var devServer: KotlinWebpackConfig.DevServer? = null
|
||||||
|
|
||||||
|
@Input
|
||||||
|
@Optional
|
||||||
|
var watchOptions: KotlinWebpackConfig.WatchOptions? = null
|
||||||
|
|
||||||
@Input
|
@Input
|
||||||
var devtool: String = WebpackDevtool.EVAL_SOURCE_MAP
|
var devtool: String = WebpackDevtool.EVAL_SOURCE_MAP
|
||||||
|
|
||||||
@@ -223,7 +226,7 @@ constructor(
|
|||||||
mode = mode,
|
mode = mode,
|
||||||
entry = if (forNpmDependencies) null else entry.get().asFile,
|
entry = if (forNpmDependencies) null else entry.get().asFile,
|
||||||
output = output,
|
output = output,
|
||||||
outputPath = if (forNpmDependencies) null else outputDirectory.get().asFile,
|
outputPath = if (forNpmDependencies) null else outputDirectory.getOrNull()?.asFile,
|
||||||
outputFileName = mainOutputFileName.get(),
|
outputFileName = mainOutputFileName.get(),
|
||||||
configDirectory = configDirectory,
|
configDirectory = configDirectory,
|
||||||
rules = rules,
|
rules = rules,
|
||||||
|
|||||||
+48
-56
@@ -8,11 +8,7 @@
|
|||||||
package org.jetbrains.kotlin.gradle.targets.js.webpack
|
package org.jetbrains.kotlin.gradle.targets.js.webpack
|
||||||
|
|
||||||
import com.google.gson.GsonBuilder
|
import com.google.gson.GsonBuilder
|
||||||
import org.gradle.api.ExtensiblePolymorphicDomainObjectContainer
|
|
||||||
import org.gradle.api.model.ObjectFactory
|
|
||||||
import org.gradle.api.provider.Provider
|
import org.gradle.api.provider.Provider
|
||||||
import org.gradle.api.tasks.*
|
|
||||||
import org.gradle.work.NormalizeLineEndings
|
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.NpmVersions
|
import org.jetbrains.kotlin.gradle.targets.js.NpmVersions
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.RequiredKotlinJsDependency
|
import org.jetbrains.kotlin.gradle.targets.js.RequiredKotlinJsDependency
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.appendConfigsFromDir
|
import org.jetbrains.kotlin.gradle.targets.js.appendConfigsFromDir
|
||||||
@@ -27,66 +23,34 @@ import java.io.StringWriter
|
|||||||
|
|
||||||
@Suppress("MemberVisibilityCanBePrivate")
|
@Suppress("MemberVisibilityCanBePrivate")
|
||||||
data class KotlinWebpackConfig(
|
data class KotlinWebpackConfig(
|
||||||
@Internal
|
|
||||||
val npmProjectDir: Provider<File>? = null,
|
val npmProjectDir: Provider<File>? = null,
|
||||||
@Input
|
|
||||||
var mode: Mode = Mode.DEVELOPMENT,
|
var mode: Mode = Mode.DEVELOPMENT,
|
||||||
@Internal
|
|
||||||
var entry: File? = null,
|
var entry: File? = null,
|
||||||
@Nested
|
|
||||||
@Optional
|
|
||||||
var output: KotlinWebpackOutput? = null,
|
var output: KotlinWebpackOutput? = null,
|
||||||
@Internal
|
|
||||||
var outputPath: File? = null,
|
var outputPath: File? = null,
|
||||||
@Input
|
|
||||||
@Optional
|
|
||||||
var outputFileName: String? = entry?.name,
|
var outputFileName: String? = entry?.name,
|
||||||
@get:PathSensitive(PathSensitivity.NAME_ONLY)
|
|
||||||
@get:Optional
|
|
||||||
@get:IgnoreEmptyDirectories
|
|
||||||
@get:NormalizeLineEndings
|
|
||||||
@get:InputDirectory
|
|
||||||
var configDirectory: File? = null,
|
var configDirectory: File? = null,
|
||||||
@Internal
|
|
||||||
var reportEvaluatedConfigFile: File? = null,
|
var reportEvaluatedConfigFile: File? = null,
|
||||||
@Input
|
|
||||||
@Optional
|
|
||||||
var devServer: DevServer? = null,
|
var devServer: DevServer? = null,
|
||||||
@Input
|
var watchOptions: WatchOptions? = null,
|
||||||
var experiments: MutableSet<String> = mutableSetOf(),
|
var experiments: MutableSet<String> = mutableSetOf(),
|
||||||
@Nested
|
|
||||||
override val rules: KotlinWebpackRulesContainer,
|
override val rules: KotlinWebpackRulesContainer,
|
||||||
@Input
|
|
||||||
@Optional
|
|
||||||
var devtool: String? = WebpackDevtool.EVAL_SOURCE_MAP,
|
var devtool: String? = WebpackDevtool.EVAL_SOURCE_MAP,
|
||||||
@Input
|
|
||||||
var showProgress: Boolean = false,
|
var showProgress: Boolean = false,
|
||||||
var optimization: Optimization? = null,
|
var optimization: Optimization? = null,
|
||||||
@Input
|
|
||||||
var sourceMaps: Boolean = false,
|
var sourceMaps: Boolean = false,
|
||||||
@Input
|
|
||||||
var export: Boolean = true,
|
var export: Boolean = true,
|
||||||
@Input
|
|
||||||
var progressReporter: Boolean = false,
|
var progressReporter: Boolean = false,
|
||||||
@Internal
|
|
||||||
@Optional
|
|
||||||
var progressReporterPathFilter: File? = null,
|
var progressReporterPathFilter: File? = null,
|
||||||
@Input
|
|
||||||
var resolveFromModulesFirst: Boolean = false
|
var resolveFromModulesFirst: Boolean = false
|
||||||
) : WebpackRulesDsl {
|
) : WebpackRulesDsl {
|
||||||
|
|
||||||
@get:Input
|
|
||||||
@get:Optional
|
|
||||||
val entryInput: String?
|
val entryInput: String?
|
||||||
get() = npmProjectDir?.get()?.let { npmProjectDir -> entry?.relativeOrAbsolute(npmProjectDir) }
|
get() = npmProjectDir?.get()?.let { npmProjectDir -> entry?.relativeOrAbsolute(npmProjectDir) }
|
||||||
|
|
||||||
@get:Input
|
|
||||||
@get:Optional
|
|
||||||
val outputPathInput: String?
|
val outputPathInput: String?
|
||||||
get() = npmProjectDir?.get()?.let { npmProjectDir -> outputPath?.relativeOrAbsolute(npmProjectDir) }
|
get() = npmProjectDir?.get()?.let { npmProjectDir -> outputPath?.relativeOrAbsolute(npmProjectDir) }
|
||||||
|
|
||||||
@get:Input
|
|
||||||
@get:Optional
|
|
||||||
val progressReporterPathFilterInput: String?
|
val progressReporterPathFilterInput: String?
|
||||||
get() = npmProjectDir?.get()?.let { npmProjectDir -> progressReporterPathFilter?.relativeOrAbsolute(npmProjectDir) }
|
get() = npmProjectDir?.get()?.let { npmProjectDir -> progressReporterPathFilter?.relativeOrAbsolute(npmProjectDir) }
|
||||||
|
|
||||||
@@ -148,6 +112,12 @@ data class KotlinWebpackConfig(
|
|||||||
var splitChunks: Any
|
var splitChunks: Any
|
||||||
) : Serializable
|
) : Serializable
|
||||||
|
|
||||||
|
@Suppress("unused")
|
||||||
|
data class WatchOptions(
|
||||||
|
var aggregateTimeout: Int? = null,
|
||||||
|
var ignored: Any? = null
|
||||||
|
) : Serializable
|
||||||
|
|
||||||
fun save(configFile: File) {
|
fun save(configFile: File) {
|
||||||
configFile.writer().use {
|
configFile.writer().use {
|
||||||
appendTo(it)
|
appendTo(it)
|
||||||
@@ -206,11 +176,21 @@ data class KotlinWebpackConfig(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun Appendable.appendDevServer() {
|
private fun Appendable.appendDevServer() {
|
||||||
if (devServer == null) return
|
if (devServer != null) {
|
||||||
|
|
||||||
appendLine("// dev server")
|
appendLine("// dev server")
|
||||||
appendLine("config.devServer = ${json(devServer!!)};")
|
appendLine("config.devServer = ${json(devServer!!)};")
|
||||||
appendLine()
|
appendLine()
|
||||||
|
}
|
||||||
|
|
||||||
|
if (watchOptions == null) return
|
||||||
|
|
||||||
|
//language=JavaScript 1.8
|
||||||
|
appendLine(
|
||||||
|
"""
|
||||||
|
config.watchOptions = ${json(watchOptions!!)};
|
||||||
|
""".trimIndent()
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun Appendable.appendExperiments() {
|
private fun Appendable.appendExperiments() {
|
||||||
@@ -257,25 +237,25 @@ data class KotlinWebpackConfig(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun Appendable.appendEntry() {
|
private fun Appendable.appendEntry() {
|
||||||
if (
|
if (entry != null) {
|
||||||
entry == null
|
//language=JavaScript 1.8
|
||||||
|| outputPath == null
|
appendLine(
|
||||||
|| output == null
|
"""
|
||||||
)
|
|
||||||
return
|
|
||||||
|
|
||||||
val multiEntryOutput = "${outputFileName!!.removeSuffix(".js")}-[name].js"
|
|
||||||
|
|
||||||
//language=JavaScript 1.8
|
|
||||||
appendLine(
|
|
||||||
"""
|
|
||||||
// entry
|
// entry
|
||||||
config.entry = {
|
config.entry = {
|
||||||
main: [require('path').resolve(__dirname, ${entryInput!!.jsQuoted()})]
|
main: [require('path').resolve(__dirname, ${entryInput!!.jsQuoted()})]
|
||||||
};
|
};
|
||||||
|
""".trimIndent()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (output != null) {
|
||||||
|
val multiEntryOutput = "${outputFileName!!.removeSuffix(".js")}-[name].js"
|
||||||
|
|
||||||
|
//language=JavaScript 1.8
|
||||||
|
appendLine(
|
||||||
|
"""
|
||||||
config.output = {
|
config.output = {
|
||||||
path: require('path').resolve(__dirname, ${outputPathInput!!.jsQuoted()}),
|
|
||||||
filename: (chunkData) => {
|
filename: (chunkData) => {
|
||||||
return chunkData.chunk.name === 'main'
|
return chunkData.chunk.name === 'main'
|
||||||
? ${outputFileName!!.jsQuoted()}
|
? ${outputFileName!!.jsQuoted()}
|
||||||
@@ -285,7 +265,19 @@ data class KotlinWebpackConfig(
|
|||||||
${output!!.libraryTarget?.let { "libraryTarget: ${it.jsQuoted()}," } ?: ""}
|
${output!!.libraryTarget?.let { "libraryTarget: ${it.jsQuoted()}," } ?: ""}
|
||||||
globalObject: "${output!!.globalObject}"
|
globalObject: "${output!!.globalObject}"
|
||||||
};
|
};
|
||||||
|
""".trimIndent()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
outputPath == null
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
//language=JavaScript 1.8
|
||||||
|
appendLine(
|
||||||
|
"""
|
||||||
|
config.output.path = require('path').resolve(__dirname, ${outputPathInput!!.jsQuoted()})
|
||||||
""".trimIndent()
|
""".trimIndent()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user