Grunt часы для запуска различных задач в разных средах
После того, как GruntJS сгенерирует мой CSS+JS, я хочу, чтобы он скопировал сгенерированные файлы в соответствующие места на серверах, и поэтому я установил для этого разные задачи grunt-copy. Пути для копирования различны для сред разработки и производства:
devjs: {
src: paths.dest + '/assets/prod.min.js',
dest: '/srv/www/dev/js/prod.min.js'
},
prodjs: {
src: paths.dest + '/assets/prod.min.js',
dest: '/srv/www/htdocs/js/prod.min.js'
},
Как я могу получить grunt watch
знать, в какой среде он находится, и запускать соответствующие задачи grunt-copy для этой среды? Нужно ли мне иметь файл конфигурации, который не отслеживается в git-репо, или что-то, что определяет среду, или есть лучший способ сделать это?
В настоящее время мой grunt-contrib-watch.js
имеет следующее, хотя я хотел бы, чтобы он запускал только копирование: devjs ИЛИ copy: prodjs в зависимости от среды.
js: {
files: [
paths.assets + '/**/*.js',
],
tasks: ['js', 'copy:devjs', 'copy:prodjs']
},
Есть идеи? Спасибо!
2 ответа
Я решил использовать параметры командной строки для этого. Так что я бы использовал, например, grunt watch --enviro=prod
в командной строке (и cron), а затем запишите это в grunt-contrib-watch.js:
module.exports = function(grunt) {
var paths = grunt.config.get('paths');
if ( grunt.option( "enviro" ) === 'prod' ) {
var jsprocess = ['js', 'copy:prodjs'];
} else if ( grunt.option( "enviro" ) === 'dev' ) {
var jsprocess = ['js', 'copy:devjs'];
} else {
var jsprocess = ['js'];
}
grunt.config.set(
'watch',
{
options: {
expand: true
},
css: {
files: [
paths.assets + '/**/*.*ss',
],
tasks: cssprocess
},...
Как я могу получить ворчливые часы, чтобы узнать, в какой среде они находятся?
Лучшей практикой является определение NODE_ENV
переменная среды, чтобы различать среды. Затем вы могли бы использовать некоторые предложения, используя process.env.NODE_ENV
регистрировать разные задачи.
После этого вы сможете запускать одно и то же имя задачи с разными конфигами.
Например:
if(process.env.NODE_ENV === 'prod')
grunt.registerTask('mytask', ['watch:prodjs']);
else
grunt.registerTask('mytask', ['watch:devjs']);
Другой подход (и, на мой взгляд, лучше) - это просто регистрировать разные задачи для каждой среды.
Этот способ более явный и, следовательно, более безопасный.
grunt.registerTask('prod-task', ['watch:prodjs', 'some-other:prodtask']);
grunt.registerTask('dev-task', ['watch:devjs', 'some-other:devtask']);
Затем вы можете просто запустить любую задачу, которая вам нужна для вашей среды.
grunt prod-task