UNPKG

grunt-reduce

Version:

A grunt kitchen that reduces your web ingredients down to their essence for optimal serving. Bon appétit

105 lines (92 loc) 3.92 kB
/*jshint onevar:false*/ /* * grunt-reduce * https://github.com/munter/grunt-reduce * * Copyright (c) 2012 Peter Müller * Licensed under the MIT license. */ module.exports = function (grunt) { grunt.registerTask('reduce', 'Description', function () { var done = this.async(); var AssetGraph = require('assetgraph-builder'), query = AssetGraph.query, urlTools = require('urltools'), chalk = require('chalk'); var config = grunt.config(this.name) || {}, rootUrl = urlTools.fsDirToFileUrl(config.root || 'app'), outRoot = urlTools.fsDirToFileUrl(config.outRoot || 'dist'), cdnRoot = config.cdnRoot && urlTools.ensureTrailingSlash(config.cdnRoot), cdnOutRoot = config.cdnOutRoot && urlTools.fsDirToFileUrl(config.cdnOutRoot), canonicalUrl = config.canonicalUrl && urlTools.ensureTrailingSlash(config.canonicalUrl), optimizeImages = config.optimizeImages === false ? false : true, sourceMaps = config.sourceMaps === false ? false : true, less = config.less === false ? false : true, scss = config.scss === false ? false : true, fileRev = config.fileRev === false ? false : true, asyncScripts = config.asyncScripts === false ? false : true, sharedBundles = config.sharedBundles === false ? false : true, subResourceIntegrity = config.subResourceIntegrity === false ? false : true, contentSecurityPolicy = config.contentSecurityPolicy === false ? false : true; // Support for locales var localeIds; if (Array.isArray(config.locales)) { localeIds = config.locales.map(function (localeId) { // Normalize localeId return localeId && localeId.replace(/-/g, '_').toLowerCase(); }); } var loadAssets = [ '*.html', '.htaccess', '*.txt', '*.ico' ]; if (config.include) { loadAssets = config.include; } var browsers = [ '> 1%', 'last 2 versions', 'Firefox ESR', 'Opera 12.1' ]; if (config.autoprefix) { grunt.log.writeln(chalk.yellow(' ⚠ The "autoprefix" property has been deprecated and replaced with "browsers". Please update your grunt-reduce config.')); browsers = config.autoprefix; } if (config.browsers) { browsers = config.browsers; } new AssetGraph({ root: rootUrl }) .logEvents() .loadAssets(loadAssets) .buildProduction({ angular: config.angular, recursive: true, canonicalUrl: canonicalUrl, browsers: browsers, less: less, scss: scss, noFileRev: !fileRev, optimizeImages: optimizeImages, sourceMaps: sourceMaps, inlineSize: config.inlineSize === 0 ? 0 : (config.inlineSize || 4096), manifest: config.manifest || false, asyncScripts: asyncScripts, cdnRoot: cdnRoot, noCompress: config.pretty || false, sharedBundles: sharedBundles, stripDebug: !(config.pretty || false), localeIds: localeIds, subResourceIntegrity: subResourceIntegrity, contentSecurityPolicy: contentSecurityPolicy }) .writeAssetsToDisc({url: /^file:/, isLoaded: true}, outRoot) .if(cdnRoot) .writeAssetsToDisc({url: query.createPrefixMatcher(cdnRoot), isLoaded: true}, cdnOutRoot || outRoot, cdnRoot) .endif() .writeStatsToStderr() .run(done); }); };