##// END OF EJS Templates
restructuring
restructuring

File last commit:

r175:fc69b40ceb98 tip default
r175:fc69b40ceb98 tip default
Show More
build.gradle
197 lines | 5.9 KiB | text/x-groovy | GroovyLexer
plugins {
id "org.implab.gradle-typescript"
id "org.implab.gradle-npm-package"
id "ivy-publish"
}
typescript {
useTsc npm.bin("tsc")
compilerOptions {
incremental = true
}
jsVariants {
node {
jsRuntime = "node"
jsModule = "commonjs"
}
browser {
jsRuntime = "browser"
jsModule = "amd"
}
}
}
def typingsFromMain = {
sets {
named("compileOnlyTypings") {
srcDir main.output("typings")
}
}
}
variants {
all {
}
}
// варианты сборки
variants {
configureEach { variant ->
// для каждого варианта есть стандартные настройки
def sourceSetLocation = { setName, self ->
self.sourceSetDir = layout.projectDirectory.dir("src/${setName}")
self.outputsDir = layout.buildDirectory.dir("${variant.name}/${setName}")
}
def main = sources.register("${variant.name}Main", sourceSetLocation.curry("main"))
def test = sources.register("${variant.name}Test", sourceSetLocation.curry("test"))
// явно добавляем наборы в вариант для применения политик и агрегации результатов
sourceSets {
add(main, role: "main")
add(test, role: "test")
}
}
register("browser") {
// специфичные наборы для варианта
def srcMainAmd = sources.register("mainAmd", typingsFromMain)
def srcTestAmd = sources.register("testAmd", typingsFromMain)
// применение аспекта компиляции ts для данного варианта
// advice to all TypescriptCompile tasks
typescriptCompile {
baseTsConfig = file("src/tsconfig.browser.json")
}
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")
}
sourceSets {
add(srcMainCjs, role: "main")
add(srcTestCjs, role: "test")
}
}
}
npmPackaging {
usePackageJson()
metadata {
name = "@implab/core"
version = project.provider { project.version.toString() }
}
// 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"))
}
}
}
}
}
publishing {
repositories {
ivy {
url "${System.properties["user.home"]}/ivy-repo"
}
}
publications {
ivy(IvyPublication) {
from components.js
}
}
}