eriwen / gradle-js-plugin

Gradle plugin for working with JS
http://eriwen.github.io/gradle-js-plugin
Apache License 2.0
382 stars 113 forks source link

Create Dynamic MinifyJsTask gradle #134

Open edubarbieri opened 8 years ago

edubarbieri commented 8 years ago

Hello,

I 'm setting up the js minify and I need dynamic configuration files, so I build the following script:

def conf = new LinkedHashMap()
conf.resourceSrc = "${projectDir}/src/main/j2ee-apps/store.war/resources/"
conf.distFolder = "${conf.resourceSrc}dist"
//for source propertie see https://github.com/eriwen/gradle-js-plugin
conf.js = [
    [
        "name": "store",
        "source": fileTree(dir :"${conf.resourceSrc}/store/js", includes :['**/*.js'])  
    ],
    [
        "name": "lib",
        "source": fileTree(dir :"${conf.resourceSrc}/vendor/js/lib", includes :['**/*.js']) 
    ],
    [
        "name": "vendor",
        "source": fileTree(dir :"${conf.resourceSrc}/vendor/js/modules", includes :['**/*.js']) 
    ]
]

task cleanDist(type: Delete) {
    description 'Clean dist folder'
    delete conf.distFolder
}

task generateTask << {
    conf.js.each { js->
        createCombineTask(js, conf).execute()
        createMinifyJsTask(js, conf).execute()      
    }
}

def createCombineTask(js, conf){
    return tasks.create("combine-${js.name}.js", com.eriwen.gradle.js.tasks.CombineJsTask) {
        source = js.source
        dest = file("${conf.distFolder}/${js.name}.js")
    }
} 

def createMinifyJsTask(js, conf){
    def baseName = "${conf.distFolder}/${js.name}" 

    tasks.create("minify-${js.name}.js", com.eriwen.gradle.js.tasks.MinifyJsTask){
        source = file("${baseName}.js")
        dest = file("${baseName}.min.js")
        sourceMap = file("${baseName}.min.js.map")
        closure {
            warningLevel = 'QUIET'
            compilerOptions.languageIn = 'ECMASCRIPT5'
        }
        doLast {
            def md5 = getFileMD5("${baseName}.min.js", 10);       

            file(dest) << "\n//# sourceMappingURL=${baseName}.min.${md5}.js.map"
            Map srcMap = new JsonSlurper().parseText( sourceMap.text )
            srcMap.sources = ["${baseName}.js"]
            sourceMap.withWriter("UTF-8") { it << new JsonBuilder(srcMap).toPrettyString() }

            def finalFileName = "${baseName}.min.${md5}.js";

            file("${baseName}.min.js").renameTo(file(finalFileName))
            file("${baseName}.min.js.map").renameTo(file("${baseName}.min.${md5}.js.map"))
        }
    }
}

When I run the command gradle cleanDist generateTask, the tasks finishes with success, the combine files is generated, but minified files aren't generated.

In log show this:

Skipping task ':minify-store.js' as it is up-to-date (took 0.002 secs).

Any idea?

skywalker2013 commented 7 years ago

any idea? I've had the same problem.

ghost commented 7 years ago

I don't know if you try this, but your source code solved my problem which it's not the same, but it's similar.

javascript.source {
    minapp {
        js {
            srcDir "src/main/webapp/client/static/angular-app"
            include "*.js"
        }
    }
    minlib {
        js {
            srcDir "src/main/webapp/client/static/angular-libs"
            include "*.js"
        }
    }
    external {
        js {
            srcDir "src/main/webapp/client/static/external-libs"
            include "*.js"
        }
    }
}

def pseudonode = [
  [
    module: 'app',
    directorie: javascript.source.minapp.js,
    name: 'angular.app'
  ],
  [
    module: 'libs',
    directorie: javascript.source.minlib.js,
    name: 'angular.libs'
  ],
  [
    module: 'external',
    directorie: javascript.source.external.js,
    name: 'external.libs'
  ]
]

task generateTask << {
    pseudonode.each { file ->
      file.directorie.files.each { item ->
        println item
      }
      //createCombineTask(file.module, file.directorie, file.name).execute()
    }
}

def createCombineTask(name, from, file){
    return tasks.create("combine-${name}.js", com.eriwen.gradle.js.tasks.CombineJsTask) {
        ["${projectDir}/js/file1.js", "${projectDir}/js/file2.js"]
        source = from
        dest = "src/main/webapp/client/bundle/js/${file}.js"
    }
}