UNPKG

node-uglifier-es

Version:

Fully auto merging and uglifying a whole NodeJs project into one file with external files option. Recompiled from Zsolt Istvan Szabo's work with uglify-es instead of uglify-js-harmony.

185 lines (143 loc) 3.69 kB
"use strict"; module.exports = function (grunt) { //// loading grunt plugins [ 'grunt-contrib-uglify', 'grunt-contrib-compress', 'grunt-contrib-watch', 'grunt-contrib-copy', 'grunt-karma', 'grunt-coveralls' ].map(grunt.loadNpmTasks); grunt.initConfig({ //////////////////////////// //// Define Directories //// //////////////////////////// dirs: { js: "src", build: "dist" }, ////////////////// //// Metadata //// ////////////////// pkg: grunt.file.readJSON("package.json"), banner: "\n" + "/*\n" + " * -------------------------------------------------------\n" + " * Project: <%= pkg.title %>\n" + " * Version: <%= pkg.version %>\n" + " *\n" + " * Author: <%= pkg.author.name %>\n" + " * Site: <%= pkg.author.url %>\n" + " * Contact: <%= pkg.author.email %>\n" + " *\n" + " *\n" + " * Copyright (c) <%= grunt.template.today(\"yyyy\") %> <%= pkg.author.name %>\n" + " * -------------------------------------------------------\n" + " */\n" + "\n", smallBanner: "/* <%= pkg.name %> - v<%= pkg.version %> - <%= grunt.template.today(\"yyyy-mm-dd\") %> */", //////////////////////////////////////// //// Copying file to dist directory //// //////////////////////////////////////// copy: { source: { files: [ { expand: true, flatten: true, src: "<%= dirs.js %>/<%= pkg.name %>.js", dest: "<%= dirs.build %>" } ] }, lcov: { files: [ { expand: true, flatten: true, src: ["coverage/*/lcov.info"], dest: "coverage" } ] } }, ////////////////////// //// Minification //// ////////////////////// uglify: { dist: { options: { banner: "<%= smallBanner %>", sourceMap: true, report: 'gzip' }, files: { "<%= dirs.build %>/<%= pkg.name %>.min.js": "<%= dirs.js %>/<%= pkg.name %>.js" } } }, ///////////////////// //// Compression //// ///////////////////// compress: { dist: { options: { mode: 'gzip' }, src: "<%= dirs.build %>/<%= pkg.name %>.min.js", dest: "<%= dirs.build %>/<%= pkg.name %>.min.js.gz" } }, ///////////////// //// Testing //// ///////////////// karma: { options: { basePath: '', frameworks: [ 'jasmine', 'requirejs' ], exclude: [], runnerPort: 9876, colors: true, logLevel: 'INFO', autoWatch: false, browsers: ['PhantomJS'], singleRun: true }, dev: { options: { files: [ 'spec/main-dev.js', {pattern: '**/*.js', included: false} ], reporters: ['progress', 'coverage'], preprocessors: { 'src/**/*.js': ['coverage'] }, coverageReporter: { reporters: [ { type: 'text-summary' }, { type: 'lcovonly'} ] } } }, dist: { options: { files: [ 'spec/main-dist.js', {pattern: '**/*.js', included: false} ], reporters: ['progress'] } } }, ////////////////// //// Coverage //// ////////////////// coveralls: { dev: { src: 'coverage/lcov.info', options: { force: true } } } }); //////////////////////// //// Register Tasks //// //////////////////////// grunt.registerTask("test:dev", [ "karma:dev" ]); grunt.registerTask("test:dist", [ "karma:dist" ]); grunt.registerTask("coverage:dev", [ "copy:lcov", "coveralls:dev" ]); grunt.registerTask("dist", [ "copy:source", "uglify:dist", "compress:dist" ]); };