Пример #1
0
    return function (cb) {
        cb = cb || function() {};

        var pngFilter = gulpFilter(['**/*.png']);

        gulp.src(sprite.src)
            .pipe(spritesmith({
                imgName: sprite.imgName,
                cssName: sprite.cssName,
                cssTemplate: 'app/components/main/template.css.handlebars'
            }))
            .pipe(gulp.dest(sprite.dest))
            .pipe(pngFilter)
            .pipe(buffer())
            .pipe(rename(function (path) {
                path.basename += '_8';
                path.extname = '.png'
            }))
            .pipe(imageminPngquant()())
            .pipe(gulp.dest(sprite.dest))
            .on('end', cb);
    }
Пример #2
0
gulp.task('png', function (callback) {
  let spritePath = dirs.source + '/blocks/sprite-png/png/';
  if(fileExist(spritePath) !== false) {
    console.log('---------- Сборка PNG спрайта');
    var sprite = gulp.src(spritePath + '*.png')
      .pipe(imagemin({
        use: [pngquant()]
      }))
      .pipe(spritesmith({
        imgName: 'sprite-png.png',
        cssName: 'sprite-png.css',
        padding: 5,
        cssOpts: {
          cssSelector: function(sprite) { return '.sprite-png--' + sprite.name}}
      }));

    var img = sprite.img
      .pipe(gulp.dest(dirs.source + '/blocks/sprite-png/img'))
      .pipe(size({
        title: 'Размер',
        showFiles: true,
        showTotal: false
      }));

    var less = sprite.css
      .pipe(rename('sprite-png.less'))
      .pipe(gulp.dest(dirs.source + '/blocks/sprite-png'))
      .pipe(size({
        title: 'Размер',
        showFiles: true,
        showTotal: false
      }));
    return merge(img, less);
  }
  else {
    console.log('---------- Сборка PNG спрайта: нет папки с картинками');
    callback();
  }
});
Пример #3
0
 let minimg = (file) => {
   imagemin([file], {
     plugins: [
       imageminMozjpeg({targa: false}),
       imageminPngquant({quality: '65-80'})
     ]
   }).then((ls) => {
     ls.forEach((item) => {
       if (item && item.data) {
         fs.writeFile(file, item.data, (er) => {
           if (er) {
             console.log(er);
           } else {
             console.log(`Minified image ${file}`);
           }
         });
       }
     });
   }).catch((e) => {
     console.log(e);
   });
 };
Пример #4
0
gulp.task('build:images', () => {
  return gulp.src(globs.images.main)
    .pipe(cache(imagemin({
      optimizationLevel: 7,
      progressive: true,
      interlaced: true,
      multipass: true,
      use: [
        pngquant(),
        imageminSvgo(),
        imageminOptipng({optimizationLevel: 7}),
        imageminJpegtran({progressive: true})
      ],
      svgoPlugins: [
        { removeViewBox: false }, // don't remove the viewbox atribute from the SVG
        { removeUselessStrokeAndFill: false }, // don't remove Useless Strokes and Fills
        { removeEmptyAttrs: false } // don't remove Empty Attributes from the SVG
      ]
    })))
    .pipe(gulp.dest(globs.images.build))
    .pipe(gulp.dest(globs.images.dist))
})
Пример #5
0
gulp.task('styles:vendor', function () {
    gulp.src('origin/css/vendor/**/*.css')
        .on('error', function () {
            this.emit('end');
        })
        .pipe(concatCSS('styles-vendor.min.css'))
        .pipe(minifyCSS())
        .pipe(gulp.dest('origin/css/'))
        .pipe(gulp.dest('app/css/'));

    gulp.src('origin/css/vendor/**/*.png')
        .on('error', function () {
            this.emit('end');
        })
        .pipe(imagemin({
            progressive: true,
            svgoPlugins: [{removeViewBox: false}],
            use: [pngquant()]
        }))
        .pipe(gulp.dest('origin/css'))
        .pipe(gulp.dest('app/css'));
});
Пример #6
0
gulp.task('release', function() {
    gulp.src(paths.js)
        .pipe(stripDebug())
        .pipe(gulp.dest(output + '/js'));

    gulp.src(paths.css)
        .pipe(gulp.dest(output + '/css'));

    gulp.src(paths.img)
        .pipe(imagemin({
            progressive: true,
            svgoPlugins: [{removeViewBox: false}],
            use: [pngquant()]
        }))
        .pipe(gulp.dest(output + '/image'));

    gulp.src(paths.html)
        .pipe(useref())
        .pipe(gulpif('*.js', uglify()))
        .pipe(gulpif('*.css', minifyCss()))
        .pipe(rev())
        .pipe(gulp.dest(output + '/html'));
});
Пример #7
0
gulp.task('img', ['clean'], function() {
    console.log('打包开始:')
    console.log('img:压缩、添加版本号中......')
    var stream = gulp.src(path + '/src/img/*.{png,gif,ico,jpg}')
        .pipe(changed(path + '/dist/img'))
            // 压缩图片
        .pipe(imagemin([
                imagemin.gifsicle(), 
                imagemin.jpegtran(), 
                imagemin.optipng(), 
                imagemin.svgo(), 
                pngquant({quality:'80'}),
                mozjpeg({quality:'60'})
                ],{verbose:true}))
            // 添加版本号
        .pipe(rev())
        .pipe(gulp.dest(path + '/dist/img'))
        .pipe(rev.manifest())
        .pipe(gulp.dest(path + '/rev/img'))
    
    return stream;

});
Пример #8
0
gulp.task('build:sprites', function () {
    var spriteData = gulp.src(path.src.sprite).pipe(spritesmith({
        imgName: 'sprite.png',
        cssName: '_sprite.scss',
        imgPath: '../img/sprite.png',
        padding: 1
    }));

    var imgStream = spriteData.img
        .pipe(buffer())
        .pipe(imagemin({
           progressive: true,
           svgoPlugins: [{removeViewBox: false}],
           use: [pngquant({quality: '65-80', speed: 4})],
           interlaced: true
        }))
        .pipe(gulp.dest(path.build.img));

    var cssStream = spriteData.css
        .pipe(gulp.dest('client_src/scss/'));

    return merge(imgStream, cssStream);
});
Пример #9
0
    return () => {
        let pipeline = gulp.src(`${config.paths.imagmin}`)
            .pipe(plumber({
                errorHandler: onError
            }))
            .pipe(imagemin([
                imagemin.gifsicle({interlaced: true}),
                imagemin.jpegtran({progressive: true}),
                imageminJpegRecompress({
                    loops  : 6,
                    min    : 60,
                    max    : 69,
                    quality: 'medium'
                }),
                imagemin.svgo(),
                imagemin.optipng({optimizationLevel: 3}),
                pngquant({quality: '65-70', speed: 5})
            ], {
                verbose: true
            }))
            .pipe(plumber.stop())

        return pipeline.pipe(gulp.dest(`${config.paths.img}`));
    }
Пример #10
0
 //编译 less
 function compileLess() {
     return gulp.src(paths.src.less)
         .pipe(less({relativeUrls: true}))
         //自动补全
         .pipe(postcss(postcssOption))
         //CSS 压缩
         .pipe(minifyCSS({
             safe: true,
             reduceTransforms: false,
             advanced: false,
             compatibility: 'ie7',
             keepSpecialComments: 0
         }))
         .pipe(lazyImageCSS({imagePath: lazyDir}))
         .pipe(tmtsprite({margin: 4}))
         //雪碧图压缩
         .pipe(imagemin({
             use: [pngquant()]
         }))
         .pipe(gulpif('*.png', gulp.dest(paths.dist.sprite), gulp.dest(paths.dist.css)))
         .on('data', function () {
         })
         .on('end',reloadHandler);
 }
gulp.task('copy', function() {
    return mergeStream(
    gulp.src('src/app/core/google-chart-customertrends/*.html').pipe(gulp.dest('./dist/core/google-chart-customertrends/')),
    gulp.src('src/app/core/google-chart-issuestrend/*.html').pipe(gulp.dest('./dist/core/google-chart-issuestrend/')),
    gulp.src('src/app/components/dashboard-geospacial/*.html').pipe(gulp.dest('./dist/dashboard-geospacial/')),
    gulp.src('src/app/components/dashboard-keymetrics/*.html').pipe(gulp.dest('./dist/dashboard-keymetrics/')),
    gulp.src('src/app/components/dashboard-dataview/*.html').pipe(gulp.dest('./dist/dashboard-dataview/')),
    gulp.src('src/app/components/dashboard/*.html').pipe(gulp.dest('./dist/dashboard/')),
    gulp.src('src/app/core/google-map/*.html').pipe(gulp.dest('./dist/core/google-map/')),
    gulp.src('src/app/components/navigation-bar/*.html').pipe(gulp.dest('./dist/navigation-bar/')),
    gulp.src('src/assets/sw/sw.js').pipe(gulp.dest('dist/')),
    gulp.src('src/*.html').pipe(gulp.dest('dist/')),
    gulp.src('src/*.xml').pipe(gulp.dest('dist/')),
    gulp.src('src/assets/img/*').pipe(imagemin({
        progressive: true,
        use: [pngquant()]
    })).pipe(gulp.dest('dist/img')),
    gulp.src('src/assets/data/*.*').pipe(gulp.dest('dist/data/')),
    gulp.src('src/assets/lib/**').pipe(gulp.dest('dist/lib/')),
    gulp.src('src/*.json').pipe(gulp.dest('dist/')),
    gulp.src('src/favicon.ico').pipe(gulp.dest('dist/')),
    gulp.src('src/assets/idb/**/*').pipe(gulp.dest('dist/idb'))
  );
});
Пример #12
0
var imgToWebBase64 = exports.imgToWebBase64 = function(file, needCompress, cb) {
  if (needCompress) {
    var basename = path.basename(file);
    var ext = path.extname(file);
    var tmpFile = path.join(tmpdir, basename);
    gulp.src(file)
      .pipe(plugins.imagemin({
        progressive: true,
        use: [pngquant({
          speed: 3,
          quality: QUANT_QUALITY
        }), mozjpeg({
          quality: JPG_QUALITY
        })]
      }))
      .pipe(gulp.dest(tmpFile))
      .on('finish', function() {
        cb && cb(null, 'data:image/' + ext.slice(1) + ';base64,/' + fileToBase64(tmpFile));
      });
  } else {
    var f = path.parse(file);
    cb && cb(null, 'data:image/' + f.ext.slice(1) + ';base64,/' + fileToBase64(file));
  }
};
Пример #13
0
gulp.task('dist', ['run.dist'], function() {
    
    gulp.src(dist+"/**/*")
        .pipe(clean({force: true}));

    gulp.src(output+"/*.html")
        .pipe(useref())
        .pipe(gulpif('*.css', minifyCss()))
        .pipe(gulpif('*.js', uglify({
            mangle: false
        })))
        .pipe(gulp.dest(dist));

    gulp.src(paths.font)
        .pipe(gulp.dest(dist+"/css/fonts"));

    gulp.src(paths.images)
        .pipe(imagemin({
            progressive: true,
            svgoPlugins: [{removeViewBox: false}],
            use: [pngquant()]
        }))
        .pipe(gulp.dest(dist+"/images"));
});
Пример #14
0
        process.nextTick(() => {
            // 如果目标文件已存在,则给出警告(但仍然覆盖)。
            if (_exists(outputRealpath)) {
                inform.warn(`Target file "${outputRealpath}" has already existed.`);
            }

            // 执行图片压缩。
            if (0 && extname == '.png') {
                // @TODO 如果输出路径文件名和原始文件名不同,则还需要执行一次文件移动。
                imagemin([ filepath ], path.dirname(outputRealpath), {
                    plugins: [
                        imageminPngquant({ quality: '50-70' })
                    ]
                });
            }
            else {
                // yuancon.fs.copy(filepath, outputRealpath);
                yuancon.fs.mkdirp(outputDirname);
                var buf = fs.readFileSync(filepath);
                fs.writeFileSync(outputRealpath, buf);
            }

            inform.log({ target: outputRealpath, type: 'webresource' });
        });
gulp.task('img-optimizer', function() {
gulp.src('static/assets/img/*')
  .pipe(imagemin({progressive: true, svgoPlugins: [{removeViewBox: false}], use: [pngquant()]})).on('error', handleError)
  .pipe(gulp.dest('static/assets/img')).on('error', handleError);
});
Пример #16
0
    jshint: {
      config: '.jshintrc'
    },
    jscs: {
      configPath: '.jscsrc'
    },
    imagemin: {
      optimizationLevel: 8,
      progressive: true,
      interlaced: true,
      multipass: true,
      svgoPlugins: [
          {removeViewBox: false},
          {removeUselessStrokeAndFill: false}
      ],
      use: [pngquant()]
    },
    svgo: {
      multipass: true,
      plugins: [
          {removeViewBox: false},
          {removeUselessStrokeAndFill: false}
      ]
    }
  }
};

var env = {
  production: false,
  build: paths.base.dev,
  options: options.dev
Пример #17
0
	var cfg = (function () {
		var config = {};
		var folder = {
			css: "/source/assets/css/",
			dest: "./../cordova/www",
			font: "/source/assets/font/",
			images: "/source/assets/img/",
			icons: "/source/assets/icon/",
			js: "/",
			source: "../source",
			vendors: "/vendors/"
		};
		config.src = {
			clean: [
				folder.dest + "/*"
			],
			font: [
				folder.source + folder.font + "**/*"
			],
			images: [
				folder.source + folder.images + "**/*"
			],
			icons: [
				folder.source + folder.icons + "**/*"
			],
			html: [
				folder.source + "/**/*.html",
				"!" + folder.source + "/**/_*.html",
				"!" + folder.source + folder.vendors + "**/*.html"
			],
			ejs: [
				folder.source + "/**/*.ejs",
				"!" + folder.source + "/**/_*.ejs",
				"!" + folder.source + folder.vendors + "**/*.ejs"
			],
			jade: [
				folder.source + "/**/*.jade",
				"!" + folder.source + "/**/_*.jade"
			],
			js: [
				folder.source + folder.js + "**/*.js",
				"!" + folder.source + folder.vendors + "**/*.js"
			],
			js_vendors: [
				folder.dest + folder.vendors + "*.js",
				"!" + folder.dest + folder.vendors + "*.min.js"
			],
			js_vendors_clean: [
				folder.dest + folder.vendors + "**/*.js",
				"!" + folder.dest + folder.vendors + "**/*.min.js"
			],
			sass: [
				folder.source + folder.css + "*.scss",
				folder.source + folder.css + "*.css",
				"!" + folder.source + folder.css + "_*.scss",
				"!" + folder.source + folder.css + "_*.css"
			]
		};
		config.watch = {
			jade: [
				folder.source + "/**/*.jade"
			],
			js_vendors: [
				folder.source + folder.vendors + "**/*.*"
			],
			sass: [
				folder.source + folder.css + "*.scss",
				folder.source + folder.css + "*.css"
			]
		};
		config.dest = {
			css: folder.dest + folder.css,
			font: folder.dest + folder.font,
			html: folder.dest + "/",
			ejs: folder.dest + "/",
			images: folder.dest + folder.images,
			icons: folder.dest + folder.icons,
			js: folder.dest + folder.js,
			js_vendors: folder.dest + folder.vendors
		};
		config.task = {
			babel_debug: {
				compact: true,
				plugins: [
					//__dirname + "/node_modules/babel-plugin-transform-runtime",
					//__dirname + "/node_modules/babel-plugin-transform-decorators-legacy",
				],
				presets: [
					__dirname + "/node_modules/babel-preset-es2015",
					__dirname + "/node_modules/babel-preset-stage-0",
					__dirname + "/node_modules/babel-preset-stage-1",
					__dirname + "/node_modules/babel-preset-stage-2",
					__dirname + "/node_modules/babel-preset-stage-3",
				],
				sourceMap: true,
			},
			babel_prod: {
				compact: true,
				plugins: [
					//__dirname + "/node_modules/babel-plugin-transform-runtime",
					//__dirname + "/node_modules/babel-plugin-transform-decorators-legacy",
					//__dirname + "/node_modules/babel-plugin-uglify",
					//["uglify:after"],
				],
				presets: [
					__dirname + "/node_modules/babel-preset-es2015",
					__dirname + "/node_modules/babel-preset-stage-0",
					__dirname + "/node_modules/babel-preset-stage-1",
					__dirname + "/node_modules/babel-preset-stage-2",
					__dirname + "/node_modules/babel-preset-stage-3",
				],
				sourceMap: false,
			},
			csso: true,
			imagemin: {
				interlaced: true,
				optimizationLevel: 3,
				progressive: true,
				svgoPlugins: [{removeViewBox: false}],
				use: [imagemin_pngquant()]
			},
			jade: {
				locals: vars,
				pretty: "\t"
			},
			sass: {
				paths: [path.join(__dirname, "sass", "includes")],
				plugins: []
			}, myth: {
				browsers: [
					"Android 4",
					"Edge 12",
					"Safari 9",
					"iOS 7",
					"ie 10",
					"last 10 Chrome versions",
					"last 10 Firefox versions"
				]
			},
			prettify: {
				indent_char: "\t",
				indent_level: 0,
				indent_size: 1,
				indent_with_tabs: true,
				max_preserve_newlines: 0,
				preserve_newlines: true,
				wrap_attributes: "auto"
			},
			uglify_vendors: {
				outSourceMap: false,
				compress: {
					sequences: true,
					unsafe: false,
					warnings: false
				}
			},
			uglify_prod: {
				outSourceMap: false,
				compress: {
					dead_code: false,
					sequences: false,
					unsafe: false,
					unused: false,
					warnings: true,
				}
			},
			uglify_debug: {
				dead_code: false,
				outSourceMap: false,
				sequences: false,
				unsafe: false,
				unused: false,
				warnings: true,
			}
		};
		config.folder = folder;
		return config;
	}());
Пример #18
0
 .write(pathOut, () => {
   imagemin([pathOut], parsedPath.dir, {
     plugins: [imageminPngquant({ quality: "60-80" })]
   });
 });
   icons:{
     appleStartup: false,
     firefox: false
   }
 }),
 new ImageminWebpackPlugin({
   svgo: {
     multipass: true,
     precision: 1
   }
 }),
 new ImageminWebpackPlugin({
   test: /(android-chrome|apple-touch|favicon).*\.(png|ico)$/i,
   plugins: [
     ImageminPngQuant({
       speed: 1
     })
   ]
 }),
 ...htmlOutputs,
 new XmlWebpackPlugin({
   files: xmlOutputs
 }),
 new CopyWebpackPlugin([{
   from: path.join(__dirname, "src", "*.txt"),
   to: path.join(__dirname, "dist"),
   flatten: true
 }]),
 new CopyWebpackPlugin([{
   from: path.join(__dirname, "src", ".htaccess"),
   to: path.join(__dirname, "dist"),
Пример #20
0
gulp.task('images', function () {
    return gulp.src('src/img/*')
        .pipe(imagemin({use:[pngquant()]}))
        .pipe(gulp.dest('dist/img'));
});
Пример #21
0
const minifyImageBuffer = (buffer) => {
  return imagemin.buffer(buffer, {plugins: [imageminPngquant()]});
};
gulp.task('pngquant', function() {
	return gulp.src('./app/img/**/*.png')
	.pipe(imageminPngquant({quality: '75-80', speed: 4})())
	.pipe(gulp.dest('./app/img'))													// where to put the file
	});
module.exports =  function (grunt, sharedConfig) {

	var _imageSrcDir = sharedConfig.srcDir + 'img/';
	var _imageDistDir = sharedConfig.distDir + 'img/';
	var _grunticonSrcDir = _imageSrcDir + 'icons/';
	var _grunticonDistDir = _imageDistDir + 'icons/';

	var _paths = {
		srcDir : _imageSrcDir,
        distDir : _imageDistDir,
        grunticonSrcDir : _grunticonSrcDir,
        grunticonDistDir : _grunticonDistDir
	};

	var _config = {
		
		/**
		 * grunt-contrib-imagemin
		 * https://github.com/gruntjs/grunt-contrib-imagemin
		 * Minify PNG, SVG, gif & JPEG images
		 */
		imagemin: {
			grunticon: {
				options: {
					optimizationLevel: 3,
					progressive : true,
					svgoPlugins: [
						{ removeViewBox: false },
						{ removeUselessStrokeAndFill: false },
						// { cleanupIDs : true },
						// { removeUnknownsAndDefaults : true}
					],
					use: [
						_mozjpeg(),
						_pngquant(),
						_gifsicle()
					]
				},
				files: [{
					expand: true,
					cwd: _grunticonSrcDir,
					src: ['**/*.{svg,png,jpg,gif}'],
					dest: _grunticonDistDir
				}]
			},

			images: {
				files: [{
					expand: true,
					cwd: _imageSrcDir,
					src: ['**/*.{svg,png,jpg,gif}'],
					dest: _imageDistDir
				}]
			}
		},


		/**
		 * Grunticon
		 * https://github.com/filamentgroup/grunticon
		 */
		grunticon: {
			all: {
				files: [{
					expand: true,
					cwd   : _grunticonDistDir,
					src   : ['*.{svg,png,jpg,gif}'],
					dest  : _grunticonDistDir
				}],
				options: {
					// https://github.com/filamentgroup/grunticon#optionscustomselectors
					// customselectors: {
					// 	'play': ['.someCustomSelector', '.someOtherCustomSelector:after'],
					// }
				}
			}
		}
	};

	var _tasks = {
		compile : {
			images : {

				dev : [
					'imagemin:images'
				],
				
				dist : [
					'imagemin:images'
				]
			},

			icons : {

				dev : [
					'imagemin:grunticon',
					'grunticon'
				],
				
				dist : [
					'imagemin:grunticon',
					'grunticon'
				]
			}
		}
	};

	grunt.registerTask('images:dev', _tasks.compile.images.dev);
	grunt.registerTask('images:dist', _tasks.compile.images.dist);
    
    grunt.registerTask('icons:dev', _tasks.compile.icons.dev);
    grunt.registerTask('icons:dist', _tasks.compile.icons.dist);

	return {
		paths : _paths,
        config : _config,
        tasks : _tasks
    };
};
Пример #24
0
gulp.task("image", function () {
    return gulp.src(src + '**/*.{jpg,png,gif}')
        .pipe(plumber())
        .pipe(imagemin({progressive: true, interlaced: true, use: [pngquant({quality: '65-80'})]}))
        .pipe(gulp.dest(dist));
});
Пример #25
0
		retinaSrcFilter: '**/*@2x.png',
		imgName: 'sprite.png',
		retinaImgName: '*****@*****.**',
		cssName: 'sprite.styl',
		algorithm: 'binary-tree',
		padding: 8,
		cssTemplate: './source/static/styles/templates/sprite-template.mustache'
	},

	imagemin: {
		optimizationLevel: 3,
		progressive: true,
		interlaced: true,
		svgoPlugins: [{removeViewBox: false}],
		use: [
			imageminPngquant(),
			imageminSvgo()
		]
	}
};

gulp.task('cleanup', function (cb) {
	return del(options.del, cb);
});

gulp.task('browser-sync', function() {
	return browserSync.init(options.browserSync);
});

gulp.task('bs-reload', function (cb) {
	browserSync.reload();
Пример #26
0
module.exports = function (grunt) {
    'use strict';

    var project = '';
    var stylename = 'style';
    var partialRepos = ['t8y'];

    var pngquant = require('imagemin-pngquant');
    var jpegRecompress = require('imagemin-jpeg-recompress');
    var svgo = require('imagemin-svgo');

    var deployDir = 'deploy/webapp/';
    var srcDir = 'src/';


    /*
     * Grunt Configuration
     */
    grunt.initConfig({
        'pkg': grunt.file.readJSON('package.json'),
        express: {
            server: {
                options: {
                    hostname: '*',
                    port: 8050,
                    bases: './',
                    server: null,
                    serverreload: false,
                    open: 'http://127.0.0.1:8050/' + deployDir + 'index.html'
                }
            }
        },
        'less': {
            dev: {
                files: [
                    { src: srcDir + 'less/style.less', dest: deployDir + 'css/style.css' }
                ]
            }
        },
        imagemin: {
            defaultOptimization: {
                options: {
                    optimizationLevel: 3,
                    progressive: true,
                    interlaced: true,
                    use: [
                        jpegRecompress({
                            loops: 6,
                            quality: 'veryhigh'
                        }),
                        svgo()
                    ]
                },
                files: [{
                    expand: true,
                    cwd: srcDir,
                    src: ['assets/img/**/*.{png,jpg,gif,svg}'],
                    dest: deployDir
                }]
            },
            pngOptimization: {
                options: {
                    use: [
                        pngquant({
                            quality: '65-80',
                            speed: 4
                        })
                    ]
                },
                files: [{
                    expand: true,
                    cwd: srcDir,
                    src: ['assets/pngoptimized/**/*.png'],
                    dest: deployDir
                }]
            }
        },

        'copy': {
            assets: {
                files: [{
                    expand: true,
                    cwd: srcDir,
                    src: ['assets/**/*.{css,ttf,eot,woff,ico}'],
                    dest: deployDir
                }]
            },
            external_sources: {
                files: [{
                    expand: true,
                    cwd: srcDir + 'resources/',
                    src: ['external_sources/**'],
                    dest: deployDir
                }]
            }
        },
        'clean': {
            assets: {
                src: [deployDir + 'assets/']
            },
            external_sources: {
                src: [deployDir + '/external_sources/']
            }
        },
        'compile-handlebars' : {
            dev: {
                template: srcDir + 'tmpl/*.handlebars',
                templateData: srcDir + 'data/*.json',
                partials: srcDir + 'tmpl/**/*.handlebars',
                output: deployDir + '*.html',
                helpers: 'grunt/handlebars/*.js',
                globals: [srcDir + 'data/globals.json']
            },
            pages: {
                template: srcDir + 'tmpl/pages/**/*.handlebars',
                templateData: srcDir + 'data/pages/**/*.json',
                partials: srcDir + 'tmpl/**/*.handlebars',
                output: deployDir + 'pages/*.html',
                helpers: 'grunt/handlebars/*.js',
                globals: [srcDir + 'data/globals.json']
            },
            ajax: {
                template: srcDir + 'tmpl/ajax/**/*.handlebars',
                templateData: srcDir + 'data/ajax/**/*.json',
                partials: srcDir + 'tmpl/**/*.handlebars',
                output: deployDir + 'ajax/*.html',
                helpers: 'grunt/handlebars/*.js',
                globals: [srcDir + 'data/globals.json']
            },
            tests: {
                template: srcDir + 'tmpl/tests/**/*.handlebars',
                templateData: srcDir + 'data/tests/**/*.json',
                partials: srcDir + 'tmpl/**/*.handlebars',
                output: deployDir + 'tests/*.html',
                helpers: 'grunt/handlebars/*.js',
                globals: [srcDir + 'data/globals.json']
            }
        },
        'html': {
            options: {}
        },
        'watch': {
            options: {
                forever: true,
                livereload: true,
                atBegin: true
            },
            less: {
                options: {
                    livereload: false
                },
                files: [srcDir + 'less/**/*.less'],
                tasks: ['less:dev']
            },
            assets: {
                files: [srcDir + 'assets/**'],
                tasks: ['copy:assets', 'newer:imagemin']
            },
            external_sources: {
                files: [srcDir + 'resources/external_sources/**'],
                tasks: ['copy:external_sources']
            },
            tmpl: {
                files: [srcDir + 'tmpl/**/*.handlebars', srcDir + 'data/*.json'],
                tasks: ['handlebars']
            },
            html: {
                files: [deployDir + '**/*.html'],
                tasks: []
            }
        },
        'bower': require('./grunt/conf/bower.js'),
        'bowerRequireWrapper': require('./grunt/conf/bowerRequireWrapper.js'),
        'responsive_videos': require('./grunt/conf/responsive_videos.js'),
        'sprite': require('./grunt/conf/sprite.js')
    });


    /*
     * required Node Modules
     */
    grunt.loadNpmTasks('grunt-contrib-less');
    grunt.loadNpmTasks('grunt-contrib-connect');
    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.loadNpmTasks('grunt-compile-handlebars');
    grunt.loadNpmTasks('grunt-contrib-copy');
    grunt.loadNpmTasks('grunt-contrib-clean');
    grunt.loadNpmTasks('grunt-contrib-imagemin');
    grunt.loadNpmTasks('grunt-php');
    grunt.loadNpmTasks('grunt-express');
    grunt.loadNpmTasks('grunt-newer');

    grunt.loadNpmTasks('grunt-bower-requirejs');
    grunt.loadNpmTasks('grunt-bower-require-wrapper');
    grunt.loadNpmTasks('grunt-bower-install-task');
    grunt.loadNpmTasks('grunt-responsive-videos');
    grunt.loadNpmTasks('grunt-spritesmith');

    //SERVER
    /*
     * If you're working on a mac and got this error -> Warning: EMFILE: Too many opened files.
     * https://github.com/gruntjs/grunt-contrib-watch#how-do-i-fix-the-error-emfile-too-many-opened-files
     *
     * Short Version
     * type into your osx console: ulimit -n 2480
     */

    /*
     * Tasks - CMD Syntax: grunt [setup,video,handlebars]
     */
    grunt.registerTask('default', ['clean', 'copy', 'express', 'watch']);
    grunt.registerTask('build', ['clean', 'copy', 'sprite', 'imagemin', 'handlebars']);

    grunt.registerTask('generate-sprite', ['sprite']);

    //TASKS
    grunt.registerTask('setup', ['bower_install', 'bower']);
    grunt.registerTask('wrap', ['bowerRequireWrapper']);
    grunt.registerTask('video', ['responsive_videos']);

    grunt.registerTask('handlebars', ['register-partial-handlebars', 'compile-handlebars']);
    grunt.registerTask('register-partial-handlebars', require('./grunt/task/register-partials.js')(grunt, partialRepos));

    grunt.event.on('watch', require('./grunt/task/register-controller.js')(grunt, 'html'));
};
Пример #27
0
gulp.task('img', function () {
    return gulp.src(['./src/**/*.jpg', './src/**/*.png', './src/**/*.gif'])
        .pipe(imagemin([imageminPngquant(), imagemin.gifsicle(), imagemin.jpegtran({progressive: true})]))
        .pipe(gulp.dest('./public/'))
})
gulp.task('copy-images', function() {
  gulp.src('src/images/*').pipe(imagemin({
    progressive: true,
    use: [pngquant()]
  })).pipe(gulp.dest('./dist/img'));
});
Пример #29
0
gulp.task('process-png', function() {
  return gulp.src(['./client/**/*.png'])
    .pipe(pngquant({quality: '65-80', speed: 4 })())
    .pipe(gulp.dest('dist/'));
});
Пример #30
0
gulp.task('images', function() {
    return gulp.src('public/src/img/**/*')
        .pipe(cache(imagemin({progressive: true, svgoPlugins: [{removeViewBox: false},{cleanupIDs: false}],use: [pngquant()]})))
        .pipe(gulp.dest('public/dist/img'));
});