diff --git a/README.md b/README.md index 3aba8cd..e6c87de 100644 --- a/README.md +++ b/README.md @@ -54,5 +54,31 @@ gradle npx<ModuleName> -Pargs="..." // npx <module-name>.js <args ### Install development dependency using npm
-gradle npmInstall -Pargs="--save-dev webpack"
+gradle npmInstall -Pargs="--save-dev react"
 
+ +### Build react frontend +```kotlin +nodejs { + rootPath("./frontend") +} + +tasks.create("buildFrontend") { + doFirst { + nodejs.execNpm("ci") + nodejs.execNpm("run", "build") + } +} +``` + +### Execute test for a specific nodejs package +```kotlin +tasks.create("testPackage") { + doFirst { + nodejs.exec { + workingDir("../package") + args(resolveBinary("npm"), "run", "test") + } + } +} +``` \ No newline at end of file diff --git a/src/main/kotlin/de/solugo/gradle/nodejs/NodeJsExtension.kt b/src/main/kotlin/de/solugo/gradle/nodejs/NodeJsExtension.kt index aa541b2..8da5923 100644 --- a/src/main/kotlin/de/solugo/gradle/nodejs/NodeJsExtension.kt +++ b/src/main/kotlin/de/solugo/gradle/nodejs/NodeJsExtension.kt @@ -15,6 +15,18 @@ class NodeJsExtension(private val project: Project) { project.provider { project.projectDir } ) + fun version(value: Any?) { + version.set(value?.toString()) + } + + fun cachePath(value: Any?) { + cachePath.set(value?.let { project.file(it) } ) + } + + fun rootPath(value: Any?) { + rootPath.set(value?.let { project.file(it) } ) + } + val instance get() = NodeJsRegistry.resolve( version = version.get(), @@ -59,9 +71,32 @@ class NodeJsExtension(private val project: Project) { } } + fun execBinary(binary: String, vararg args: String) { + exec { + commandLine( + buildList { + add(resolveBinary(binary)) + addAll(args) + } + ) + } + } + + fun execScript(script: String, vararg args: String) { + exec { + commandLine( + buildList { + add(resolveScript(script)) + addAll(args) + } + ) + } + } + + fun execNode(vararg args: String) { execNode { - commandLine(args) + commandLine(*args) } } @@ -77,7 +112,7 @@ class NodeJsExtension(private val project: Project) { fun execNpm(vararg args: String) { execNpm { - commandLine(args) + commandLine(*args) } } @@ -93,7 +128,7 @@ class NodeJsExtension(private val project: Project) { fun execNpx(vararg args: String) { execNpx { - commandLine(args) + commandLine(*args) } } diff --git a/src/test/kotlin/de/solugo/gradle/nodejs/NodeJsPluginTest.kt b/src/test/kotlin/de/solugo/gradle/nodejs/NodeJsPluginTest.kt index b40d301..f3f0b19 100644 --- a/src/test/kotlin/de/solugo/gradle/nodejs/NodeJsPluginTest.kt +++ b/src/test/kotlin/de/solugo/gradle/nodejs/NodeJsPluginTest.kt @@ -1,6 +1,7 @@ package de.solugo.gradle.nodejs import de.solugo.gradle.test.core.Directory.Helper.extractDirectoryFromClasspath +import de.solugo.gradle.test.core.Directory.Helper.file import de.solugo.gradle.test.core.Directory.Helper.withTemporaryDirectory import de.solugo.gradle.test.core.Executor.Companion.execute import de.solugo.gradle.test.core.GradleTest @@ -13,7 +14,8 @@ class NodeJsPluginTest { fun `get node version`() { GradleTest { withTemporaryDirectory { - path.extractDirectoryFromClasspath("common") + path.extractDirectoryFromClasspath("default") + path.extractDirectoryFromClasspath("empty") } execute("nodeVersion") { assertThat(output).contains( @@ -29,7 +31,8 @@ class NodeJsPluginTest { fun `get npm version`() { GradleTest { withTemporaryDirectory { - path.extractDirectoryFromClasspath("common") + path.extractDirectoryFromClasspath("default") + path.extractDirectoryFromClasspath("empty") } execute("npmVersion") { assertThat(output).contains( @@ -45,7 +48,8 @@ class NodeJsPluginTest { fun `get yarn version`() { GradleTest { withTemporaryDirectory { - path.extractDirectoryFromClasspath("common") + path.extractDirectoryFromClasspath("default") + path.extractDirectoryFromClasspath("empty") } execute("yarnVersion") { assertThat(output).contains( @@ -57,4 +61,21 @@ class NodeJsPluginTest { } } + @Test + fun `build in subfolder is successful`() { + GradleTest { + withTemporaryDirectory { + path.extractDirectoryFromClasspath("default") + path.extractDirectoryFromClasspath("project") + } + execute("buildPackage") { + assertThat(output).contains( + """ + Hello World + """.trimIndent() + ) + } + } + } + } \ No newline at end of file diff --git a/src/test/resources/common/build.gradle.kts b/src/test/resources/common/build.gradle.kts deleted file mode 100644 index 1b85c5b..0000000 --- a/src/test/resources/common/build.gradle.kts +++ /dev/null @@ -1,32 +0,0 @@ -plugins { - id("java") - id("de.solugo.nodejs") -} - -tasks.create("nodeVersion") { - doFirst { - nodejs.execNode { - commandLine("--version") - } - } -} - -tasks.create("npmVersion") { - doFirst { - nodejs.execNpm { - commandLine("--version") - } - } -} - - -tasks.create("yarnVersion") { - doFirst { - nodejs.execNpm { - commandLine("install", "yarn@1.22.19") - } - nodejs.exec { - commandLine(resolveBinary("yarn"), "--version") - } - } -} \ No newline at end of file diff --git a/src/test/resources/common/settings.gradle.kts b/src/test/resources/default/settings.gradle.kts similarity index 100% rename from src/test/resources/common/settings.gradle.kts rename to src/test/resources/default/settings.gradle.kts diff --git a/src/test/resources/empty/build.gradle.kts b/src/test/resources/empty/build.gradle.kts new file mode 100644 index 0000000..e95b8ae --- /dev/null +++ b/src/test/resources/empty/build.gradle.kts @@ -0,0 +1,35 @@ +plugins { + id("java") + id("de.solugo.nodejs") +} + +tasks.create("nodeVersion") { + doFirst { + nodejs.execNode("--version") + } +} + +tasks.create("npmVersion") { + doFirst { + nodejs.execNpm("--version") + } +} + + +tasks.create("yarnVersion") { + doFirst { + nodejs.execNpm("install", "yarn@1.22.19") + nodejs.execBinary("yarn", "--version") + } +} + +tasks.create("buildFrontend") { + doFirst { + nodejs.exec { + workingDir("../package") + args(resolveBinary("npm"), "run", "test") + } + nodejs.execNpm("install", "yarn@1.22.19") + nodejs.execBinary("yarn", "--version") + } +} \ No newline at end of file diff --git a/src/test/resources/project/build.gradle.kts b/src/test/resources/project/build.gradle.kts new file mode 100644 index 0000000..ccb8a37 --- /dev/null +++ b/src/test/resources/project/build.gradle.kts @@ -0,0 +1,14 @@ +plugins { + id("java") + id("de.solugo.nodejs") +} + +nodejs { + rootPath("./package") +} + +tasks.create("buildPackage") { + doFirst { + nodejs.execNpm("run", "hello") + } +} \ No newline at end of file diff --git a/src/test/resources/project/package/main.js b/src/test/resources/project/package/main.js new file mode 100644 index 0000000..b8c57fe --- /dev/null +++ b/src/test/resources/project/package/main.js @@ -0,0 +1 @@ +console.log("Hello World") \ No newline at end of file diff --git a/src/test/resources/project/package/package.json b/src/test/resources/project/package/package.json new file mode 100644 index 0000000..c29c6fc --- /dev/null +++ b/src/test/resources/project/package/package.json @@ -0,0 +1,7 @@ +{ + "name": "test", + "version": "0.0.0", + "scripts": { + "hello": "node main.js" + } +}