рабочий процесс интерфейса (Ворчание) соответствует бэкенду php (Symfony2-Twig)


Я интерфейсный парень, я использую Grunt (cssmin, меньше компиляции, уродство, загрузка печени, уменьшение изображения, просмотр, ворсинка...), и я начал работать с бэкэндом, который использует Symfony (шаблоны веток, средства для большинства задач, которые я выполняю с помощью Grunt...)

Мы используем своего рода шаблон "Модель-представление-модель" (извините, я не эксперт по бэкэнду).

Проблема в том, чтобы найти правильный рабочий процесс для нас обоих.
Я бы хотел остаться с Grunt, так как сейчас это лучшее для фронт-энда, я думать.

Мой обычный рабочий процесс заключается в запуске веб-сервера Grunt на локальном хосте:9000 и кодировании с нагрузкой на печень, без компиляции.
Когда я закончу, я смогу использовать "сборку с ворчанием" для выполнения "производственных" задач (сокращение, уродство, сжатие изображений...)

Проблема связана с шаблонами Php и Twig, я не могу использовать grunt и запускать веб-сервер для Php, и я не могу отображать шаблоны с помощью twig.js потому что это не то, что мы используем в производстве.
Также нам приходится иметь дело с Symfony2 серверная часть фреймворка.

Для загружаемой части я использую автономный плагин, но отслеживаю файлы и перезагружаю страницу, но, например, компиляция less не работает, так как Lessphp не полностью совместим с загрузкой Twitter (фреймворк, который я использую на интерфейсе)

У вас есть какие-нибудь предложения? Я могу добавить детали на всякий случай.

Я бы предпочел оставаться с Грантом как можно дольше, но я могу подумать об использовании активов, если он выполнит все ту же задачу или другое решение.

Это мой настоящий файл с ворчанием.js, когда я работаю только на интерфейсе:

var LIVERELOAD_PORT = 35729;
var lrSnippet = require('connect-livereload')({
    port: LIVERELOAD_PORT
});
var mountFolder = function(connect, dir) {
    return connect.static(require('path').resolve(dir));
};

module.exports = function(grunt) {    
    pkg: grunt.file.readJSON('package.json'),

                src: 'src',
        app: 'app',
        assets: '<%= project.app %>/assets',
        css: [
            '<%= project.src %>/less/bootstrap.less'
        ],
        js: [
            '<%= project.src %>/js/*.js'
        ]
    },

    connect: {
        options: {
            port: 9000,
            hostname: '*'
        },
        livereload: {
            options: {
                middleware: function(connect) {
                    return [lrSnippet, mountFolder(connect, 'app')];
                }
            }
        }
    },

    concat: {
        dev: {
            files: {
                '<%= project.assets %>/js/scripts.min.js': '<%= project.js %>'
            }
        },
        options: {
            stripBanners: true,
            nonull: true,
            banner: '<%= tag.banner %>'
        }
    },

    uglify: {
        options: {
            banner: "<%= tag.banner %>"
        },
        dist: {
            files: {
                '<%= project.assets %>/js/scripts.min.js': '<%= project.js %>'
            }
        }
    },

    less: {
        dev: {
            files: {
                '<%= project.assets %>/css/style.min.css': '<%= project.css %>'
            }
        },
        dist: {
            options: {
                cleancss: true
            },
            files: {
                '<%= project.assets %>/css/style.min.css': '<%= project.css %>'
            }
        }
    },

    imagemin: { // Task
        dynamic: { // Another target
            files: [{
                expand: true, // Enable dynamic expansion
                cwd: '<%= project.src %>/img', // Src matches are relative to this path
                src: ['**/*.{png,jpg,gif}'], // Actual patterns to match
                dest: '<%= project.assets %>/img' // Destination path prefix
            }]
        }
    },

    open: {
        server: {
            path: 'http://localhost:<%= connect.options.port %>'
        }
    },

    watch: {
        concat: {
            files: '<%= project.src %>/js/{,*/}*.js',
            tasks: ['concat:dev', 'jshint']
        },
        less: {
            files: '<%= project.src %>/less/{,*/}*.less',
            tasks: ['less:dev']
        },
        livereload: {
            options: {
                livereload: LIVERELOAD_PORT
            },
            files: [
                '<%= project.app %>/{,*/}*.html',
                '<%= project.assets %>/css/*.css',
                '<%= project.assets %>/js/{,*/}*.js',
                '<%= project.assets %>/{,*/}*.{png,jpg,jpeg,gif,webp,svg}'
            ]
        }
    }
};

grunt.registerTask('default', [
    'less:dev',
    'concat:dev',
    'connect:livereload',
    'open',
    'watch'
]);

grunt.registerTask('build', [
    'less:dist',
    'uglify',
    'imagemin'
]);
Author: Web_Designer, 2013-11-02

1 answers

Решено:
Использование Vagrant единственное, что важно при перезагрузке, - это установить задачу наблюдения для шаблонов веток.
Вот gruntfile.js правка, которую я сделал:

livereload: {
                options: {
                    livereload: LIVERELOAD_PORT
                },
                files: [
                    ...
                    '<%= project.views %>/{,*/}*.html.twig',
                    '...
                ]
            }

Затем установите другой порт на гостевой машине:

var LIVERELOAD_PORT = 35728;

Затем установите переадресацию на вашем Vagrantfile от вашего гостя к вашему хосту с правильным портом, на котором прослушивается расширение chrome с загрузкой (35729)

config.vm.network :forwarded_port, guest: 35728, host: 35729

Все работает как по маслу.

 0
Author: mtt, 2013-11-05 12:26:47