Javascript 使用不同参数多次运行渐变任务
我正在尝试编写一个gradle任务,它将缩小我的项目的所有javascript文件。我正在使用一个gradle库:Javascript 使用不同参数多次运行渐变任务,javascript,gradle,minify,Javascript,Gradle,Minify,我正在尝试编写一个gradle任务,它将缩小我的项目的所有javascript文件。我正在使用一个gradle库:com.eriwen.gradle.js。此库包含一个名为minifyJs的任务,我们在其中定义要缩小的源文件和缩小文件的目标: minifyJs { source = file(sourcePathString) dest = file(targetPathString) } 我要做的是为我的项目中的每个javascript文件调用execute这个任务,并为每个文件在一
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}
wherecoObject=newcompileroptions()
和coObject.setLanguageIn(CompilerOptions.LanguageMode.ECMAScript 5
但它仍然无法缩小带有尾随逗号的脚本…@Konstantine:您根本不需要修改插件,但我确实省略了buildSrc的build.gradle部分-我会将其添加到我的答案中。@Konstantine gradle js插件本身使用的是一个旧版本的闭包编译器,可能不需要修改它。)ave ECMAScript 5选项;但是,我在这里提供的是最新的,应该可以使用。唯一需要注意的是,此任务没有使用自定义js源集,因此您必须指定一个目录。