Skip to content

Instantly share code, notes, and snippets.

@A
Last active December 22, 2015 17:19
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save A/6505312 to your computer and use it in GitHub Desktop.
Save A/6505312 to your computer and use it in GitHub Desktop.
'use strict';
var path = require('path');
var lrSnippet = require('grunt-contrib-livereload/lib/utils').livereloadSnippet;
var folderMount = function folderMount(connect, point) {
return connect.static(path.resolve(point));
};
module.exports = function (grunt) {
// grunt || grunt browser — разработка в браузере
// grunt phonegap — компиляция проекта под phonegap
var config = grunt.file.readJSON('config.json') ||
grunt.fatal('config.json not found');
var pkg = config.variables.pkg = grunt.file.readJSON('package.json') ||
grunt.fatal('package.json not found');
// Определяем переменную окружения.
//
// В HTML используется в <body class"<%= @ENV %>">.
// В JS используется для определения функций, которые работают только в определенной среде.
// По-умолчанию имеет значение 'browser'
var ENV = config.variables.ENV = grunt.cli.tasks[0];
if (!ENV || ENV==='deploy') { ENV = 'browser'; }
var variables = config.variables;
variables.ENV = ENV;
var ignore = config.ignore = (function(config) {
// Разрешаем паттерны из config.ignore, так что бы они ссылались на dst
var patterns = [];
for (var key in config.ignore) {
if (config.ignore.hasOwnProperty(key)) {
patterns.push(path.join(config.dst,config.ignore[key]));
}
}
return patterns;
})(config);
var tasks = {
livereload: {
port: 35729 // Default livereload listening port.
},
connect: {
livereload: {
options: {
port: config.port,
middleware: function(connect, options) {
var dst = path.resolve(config.dst);
return [lrSnippet, folderMount(connect, dst)];
}
}
}
},
// Configuration to be run (and then tested)
regarde: {
ect: {
files: ['_src/**/*.ect','_src/**/*.part','_src/**/*.layout'],
tasks: ['ect', 'livereload']
},
less: {
files: ['_src/**/*.less'],
tasks: ['less:browser','livereload'] // При компиляции под phonegap livereload не используется
},
js: {
files: ['_src/**/*.js'],
// tasks: ['uglify:main','livereload']
tasks: ['concat:main','livereload']
}
},
copy: {
main: {
files: [{
expand: true,
cwd: config.src,
src: '**',
dest: config.dst
}]
}
},
clean: {
dst: path.join(config.dst, '**/*'),
ignore: ignore
},
ect: {
compile: {
options: {
root: config.src // Все инклуды работают от этой директории
},
variables: variables,
cwd: config.src, // Каталог, относительно которого идет поиск файлов по паттернам
patterns: '**/*.ect', // Включяя './*.ect'
dest: config.dst // Каталог, относительно которого компилируются шаблоны
}
},
less: {
browser: {
options: {
},
files: config.less.browser
},
phonegap: {
options: {
yuicompress: true // Сжимаем CSS для phonegap
},
files: config.less.phonegap
}
},
// uglify: {
// options: {
// mangle: false,
// beautify: true,
// compress: {
// global_defs: {
// ENV: ENV
// }
// }
// },
// main: {
// files: config.js
// }
// },
concat: {
main: {
files: config.js
}
},
rsync: {
deploy: {
src: config.src,
dest: config.rsync.dir,
host: config.rsync.host,
recursive: true,
syncDest: true
}
}
};
grunt.initConfig(tasks);
grunt.registerTask('lvrld', ['livereload-start', 'connect', 'regarde']);
// Список задач для браузера без livereload
grunt.registerTask('main', [
'clean:dst',
'copy:main',
'clean:ignore',
// 'uglify:main',
'concat:main',
'ect',
'less:browser'
]);
// Резработка в браузере
grunt.registerTask('browser', [
'main',
'lvrld'
]);
// Phonegap. Компиляция
grunt.registerTask('phonegap', [
'clean:dst',
'copy:main',
'clean:ignore',
// 'uglify:main',
'concat:main',
'less:phonegap',
'ect'
]);
grunt.registerTask('deploy', ['main', 'rsync:deploy']);
// Задача по-умолчанию — 'browser'
grunt.registerTask('default', ['browser']);
grunt.loadNpmTasks('grunt-rsync');
grunt.loadNpmTasks('grunt-ect-templates');
grunt.loadNpmTasks('grunt-remove-logging');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-less');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-livereload');
grunt.loadNpmTasks('grunt-contrib-connect');
grunt.loadNpmTasks('grunt-regarde');
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment