node-gradle / gradle-node-plugin

Gradle plugin for integrating NodeJS in your build. :rocket:
Apache License 2.0
599 stars 117 forks source link

pnpm dynamic task rule uses registers task instead of creating it #279

Open donarus opened 1 year ago

donarus commented 1 year ago

The addPnpmRule should use the same logit as addNpmRule.

It should create (and not only register) the task.

donarus commented 1 year ago

the reason for this is that right now the task is not created until task collection is asked to create it, because register is lazy by default.

Right now, one have to overcome this issue by calling the "get" method on TaskProvider to create the real task and then it can be used in depends_on

tasks.named("pnpm_run_build").get() // see

tasks.register<DefaultTask>("build") {
    dependsOn("pnpm_run_build")
}

the same for for example pnpm_run_test etc...

deepy commented 1 year ago

On one hand this makes perfect sense and this absolutely shouldn't differ between the different tools But on the other hand, we want to discourage the use of the rule-generated tasks

The reasoning behind this is that the moment you want to depend on something then this is no longer an ad-hoc task being run, and ad-hoc tasks is what the rule is meant for If you've got something that's being run often, like say foo_run_build ideally you should create a proper task with inputs/outputs and all that jazz and name it fooRunBuild

By doing this you don't incur any cost for configuring the task if it's not being used, Gradle has lazy configuration but if we create the task instead of registering it we prevent it from being lazy

I need to do some quick searches and see how these are being used in the wild, I can see why this is convenient and it might be that it should just be solved by proper documentation rather than artificial technical limitations