Javascript 使用不同参数多次运行渐变任务

Javascript 使用不同参数多次运行渐变任务,javascript,gradle,minify,Javascript,Gradle,Minify,我正在尝试编写一个gradle任务,它将缩小我的项目的所有javascript文件。我正在使用一个gradle库:com.eriwen.gradle.js。此库包含一个名为minifyJs的任务,我们在其中定义要缩小的源文件和缩小文件的目标: minifyJs { source = file(sourcePathString) dest = file(targetPathString) } 我要做的是为我的项目中的每个javascript文件调用execute这个任务,并为每个文件在一

我正在尝试编写一个gradle任务,它将缩小我的项目的所有javascript文件。我正在使用一个gradle库:
com.eriwen.gradle.js
。此库包含一个名为
minifyJs
的任务,我们在其中定义要缩小的源文件和缩小文件的目标:

minifyJs {
  source = file(sourcePathString)
  dest = file(targetPathString)
}
我要做的是为我的项目中的每个javascript文件调用execute这个任务,并为每个文件在一个新路径中生成它的一个缩小版本。这将要求我每次使用不同的
dest
值多次运行
minifyJs
任务,但我似乎找不到解决方法。有人建议我们使用一个循环为每个javascript文件创建一个
类型的新任务:minifyJs
,但这需要花费大量时间,将创建250多个任务,即根本无效

由于在另一个任务中调用任务不起作用(并且使用
task.execute()
是一种不好的做法),我本质上是在寻找一种可以实现这一点的解决方法:

task customMinify {
  def jsFileTree = fileTree('my/javascript/files')
  jsFileTree.forEach {
    def jsFile = it
    minifyJs {
      source = file(jsFile.getPath())
      dest = file('new/path/to/file.js')
    }
  }
}

这显然不起作用,因为我们不能在另一个任务中调用
minifyJs

我真的很抱歉gradle js插件中仍然存在这个漏洞

由于生成任务不行,我建议您在
buildSrc
下结合my和

如果您愿意等待8个小时左右,如果您愿意的话,我可以稍后编写一个实现

编辑:这里有一个你可以加入
buildSrc/src/main/groovy/com/eriwen/gradle/js/tasks
,它将分别缩小每个文件并生成单独的源代码映射文件等

buildSrc/build.gradle:

repositories {
    mavenCentral()
}

dependencies {
    compile localGroovy()
    compile gradleApi()
    compile ('com.google.javascript:closure-compiler:v20151015') {
        exclude module: 'junit'
    }
}
示例用法:

task mini(type: com.foo.bar.ClosureMinifyTask) {
    source = "src/js"
    dest = "${buildDir}/js/minified"
}

实际上,
source
接受一个源列表。但所有文件仍将有一个输出。它对您有帮助吗?如果没有,您需要定义一个聚合任务,并创建尽可能多的任务和文件。所有这些任务都将从聚合器运行。你能举个例子吗?我知道如何使用
任务创建新任务。create(name:'taskName',type:'taskType'){}
但之后我不知道如何让主任务(或聚合器)执行它们…注意,我不希望gradle在构建阶段创建任务。我希望它在主任务执行期间创建它们。否则我将定义200多个任务。。。这是我准备的一个演示。哇,没想到造物主自己会在同一天修复。尽管我对如何实现
ClosureMinifyTask
有点困惑。现在我正在使用你的库作为插件。我猜我必须在我的桌面上克隆这个项目,然后从那里使用它?此外,如果您在较新版本中的某个时间点实现了新功能,那么本质上需要的是提供一组文件路径,并让缩小程序“克隆”每个文件的缩小版本,使其位于一个全新的位置,并具有全新的名称(以避免每个缩小的文件与源文件混淆).我尝试从github下载整个项目并添加类,但似乎无法再次将其编译成新的.jar。出于某种原因,IntelliJ无法读取类路径中的库,并且我不能确定是不是
build.gradle
文件中的某些配置导致了问题。另外,如果可以给出一个如何使用
编译器选项的示例,因为我似乎无法让它工作。我写道:
closure{compilerOptions=coObject}
where
coObject=newcompileroptions()
coObject.setLanguageIn(CompilerOptions.LanguageMode.ECMAScript 5
但它仍然无法缩小带有尾随逗号的脚本…@Konstantine:您根本不需要修改插件,但我确实省略了buildSrc的build.gradle部分-我会将其添加到我的答案中。@Konstantine gradle js插件本身使用的是一个旧版本的闭包编译器,可能不需要修改它。)ave ECMAScript 5选项;但是,我在这里提供的是最新的,应该可以使用。唯一需要注意的是,此任务没有使用自定义js源集,因此您必须指定一个目录。