build.gradle
197 lines
| 5.9 KiB
| text/x-groovy
|
GroovyLexer
|
|
r87 | plugins { | |
|
|
r174 | id "org.implab.gradle-typescript" | |
| id "org.implab.gradle-npm-package" | |||
| id "ivy-publish" | |||
|
|
r95 | } | |
|
|
r174 | typescript { | |
| useTsc npm.bin("tsc") | |||
|
|
r90 | ||
|
|
r174 | compilerOptions { | |
| incremental = true | |||
|
|
r89 | } | |
|
|
r175 | ||
| jsVariants { | |||
| node { | |||
| jsRuntime = "node" | |||
| jsModule = "commonjs" | |||
| } | |||
| browser { | |||
| jsRuntime = "browser" | |||
| jsModule = "amd" | |||
| } | |||
| } | |||
|
|
r59 | } | |
|
|
r174 | def typingsFromMain = { | |
| sets { | |||
| named("compileOnlyTypings") { | |||
| srcDir main.output("typings") | |||
|
|
r99 | } | |
| } | |||
|
|
r92 | } | |
|
|
r174 | variants { | |
|
|
r175 | all { | |
| } | |||
| } | |||
| // варианты сборки | |||
| variants { | |||
|
|
r174 | configureEach { variant -> | |
|
|
r175 | // для каждого варианта есть стандартные настройки | |
|
|
r174 | def sourceSetLocation = { setName, self -> | |
| self.sourceSetDir = layout.projectDirectory.dir("src/${setName}") | |||
| self.outputsDir = layout.buildDirectory.dir("${variant.name}/${setName}") | |||
| } | |||
|
|
r47 | ||
|
|
r174 | def main = sources.register("${variant.name}Main", sourceSetLocation.curry("main")) | |
| def test = sources.register("${variant.name}Test", sourceSetLocation.curry("test")) | |||
|
|
r90 | ||
|
|
r175 | // явно добавляем наборы в вариант для применения политик и агрегации результатов | |
|
|
r174 | sourceSets { | |
|
|
r175 | add(main, role: "main") | |
| add(test, role: "test") | |||
|
|
r174 | } | |
|
|
r93 | } | |
|
|
r174 | register("browser") { | |
|
|
r175 | // специфичные наборы для варианта | |
| def srcMainAmd = sources.register("mainAmd", typingsFromMain) | |||
|
|
r174 | def srcTestAmd = sources.register("testAmd", typingsFromMain) | |
|
|
r175 | // применение аспекта компиляции ts для данного варианта | |
|
|
r174 | // advice to all TypescriptCompile tasks | |
| typescriptCompile { | |||
| baseTsConfig = file("src/tsconfig.browser.json") | |||
| } | |||
|
|
r90 | ||
|
|
r175 | sourceSets { | |
| add(srcMainAmd, role: "main") | |||
| add(srcTestAmd, role: "test") | |||
| } | |||
| } | |||
| register("node") { | |||
| // специфичные наборы для варианта | |||
| def srcMainCjs = sources.register("mainCjs", typingsFromMain) | |||
| def srcTestCjs = sources.register("testCjs", typingsFromMain) | |||
| // применение аспекта компиляции ts для данного варианта | |||
| typescriptCompile { | |||
| baseTsConfig = file("src/tsconfig.node.json") | |||
|
|
r174 | } | |
|
|
r90 | ||
|
|
r174 | sourceSets { | |
|
|
r175 | add(srcMainCjs, role: "main") | |
| add(srcTestCjs, role: "test") | |||
|
|
r174 | } | |
| } | |||
|
|
r98 | } | |
|
|
r175 | npmPackaging { | |
|
|
r174 | usePackageJson() | |
| metadata { | |||
| name = "@implab/core" | |||
| version = project.provider { project.version.toString() } | |||
|
|
r92 | } | |
|
|
r175 | ||
| // creates writeBrowserPackageJson npmPackBrowser, npmPublishBrowser | |||
| variant("browser") { | |||
| metadata { | |||
| name = "@implab/core-amd" | |||
| } | |||
| variantOutputs("main") | |||
| } | |||
| // creates writeNodePackageJson, npmPackNode, npmPublishNode | |||
| variant("node") { | |||
| metadata { | |||
| name = "@implab/core-node" | |||
| } | |||
| variantOutputs("main") | |||
| } | |||
| // creates writePackageJson, npmPack, npmPublish | |||
| package { | |||
| metadata { | |||
| name = "@implab/core-amd" | |||
| } | |||
| content { // CopySpec | |||
| // как-то кривенько | |||
| from(variants.named("node").map { it.outputs("main") }) { | |||
| into "dist/node" | |||
| } | |||
| from(variants.named("browser").map { it.outputs("main") }) { | |||
| into "dist/node" | |||
| } | |||
| } | |||
| } | |||
| } | |||
| outgoingJs { | |||
| } | |||
| outgoingVariants { | |||
| // registers nodeElements configuration | |||
| variant("node") { // ConfigurationPublications | |||
| // как-то шумно | |||
| attribute(JS_RUNTIME, "node") | |||
| attribute(JS_MODULE, "commonjs") | |||
| attribute(JS_TARGET, "es2020") | |||
| attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements, "npm-module")) | |||
| // основной артефакт, связь по имени задачи, неудачный вариант | |||
| artifact(tasks.named("npmPackNode")) | |||
| // variants... кругом variants | |||
| variants { | |||
| exploded { | |||
| attributes { | |||
| // шумновато, но это стандартное API gradle | |||
| attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements, "exploded-npm-module")) | |||
| } | |||
| // связь по имени задачи, неудачный вариант | |||
| artifact(tasks.named("assembleNodeModule")) | |||
| } | |||
| typings { | |||
| attributes { | |||
| attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements, "typescript-typings")) | |||
| } | |||
| // связь по имени задачи, неудачный вариант | |||
| artifact(tasks.named("assembleNode")) | |||
| } | |||
| } | |||
| } | |||
| variant("browser") { | |||
| // все те же проблемы что и для variant("node") | |||
| attribute(JS_RUNTIME, "browser") | |||
| attribute(JS_MODULE, "amd") | |||
| attribute(JS_TARGET, "es2015") | |||
| attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements, "npm-module")) | |||
| artifact(tasks.named("npmPackBrowser")) | |||
| variants { | |||
| variants { | |||
| typings { | |||
| attributes { | |||
| attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements, "typescript-typings")) | |||
| } | |||
| artifact(tasks.named("assembleNode")) | |||
| } | |||
| } | |||
| } | |||
| } | |||
|
|
r96 | } | |
|
|
r95 | publishing { | |
|
|
r175 | repositories { | |
| ivy { | |||
| url "${System.properties["user.home"]}/ivy-repo" | |||
|
|
r95 | } | |
| } | |||
|
|
r175 | publications { | |
| ivy(IvyPublication) { | |||
| from components.js | |||
|
|
r95 | } | |
| } | |||
|
|
r90 | } |
