Laravel Elixir

Introdução

Laravel Elixir fornece uma limpa e fluente API para definição básica Gulp de tarefas para sua aplicação Laravel. Elixir dá suporte a vários pré-prcessadores de javascript e css comuns, e até ferramentas de teste.

Se você já ficou confuso sobre como começar com Gulp e compilação ativa, você irá amar Laravel Elixir!

Instalação e Configuração

Instalando o Node

Antes de engatilhar o Elixir, você tem que primeiro que o Node.js estaja instalado na sua máquina.

node -v

Por padrão, a Laravel Homestead inclui tudo que você precisa; contudo, se você não estiver usando Vagrant, então você pode facilmente instalar o Node visitando sua página de download. Não se preocupe, é rápido e fácil.

Gulp

Em seguida, você que precisar baixar o Gulp como um pacote global NPM(Node Package Manager|Gerenciador de Pacotes do Node) assim:

npm install --global gulp

Laravel Elixir

O único passo restante é instalar o Elixir! Com a nova instalação do Laravel, você irá achar o arquivo package.json na raíz do projeto. Pense nisto como se fosse seu arquivo composer.json, exceto que isto define dependências do Node ao invés do PHP. Você pode instalar dependências citadas anteriormente executando o seguinte:

npm install

Uso

Agora que você instalou Elixir, você irá estar compilando e concatenando em nenhum momento! O arquvio gulpfile.js no diretório raíz dos seus projetos contém todas as suas tarefas Elixir!

Compile Less

elixir(function(mix) {
    mix.less("app.less");
});

No exemplo acima, Elixir asume que seus arquivos Lesse estão armazenados em resources/assets/less.

Compile Múltiplos Arquivos Less

elixir(function(mix) {
    mix.less([
        'app.less',
        'something-else.less'
    ]);
});

Compile Sass

elixir(function(mix) {
    mix.sass("app.sass");
});

Isto assume que seus arquivos Sass são armazenados no diretório resources/assets/sass.

Por padrão, Elixir, por deibaixo dos panos, use a biblíoteca LibSass para compilação. Em algumas casos, pode ser vantajosos em vez de aproveitar a versão Ruby, que, embora mais lento, é mais rico em recursos. Supondo que você tem ambos instalados Ruby e a gem Sass(gem install sass), você pode ativar modo-Ruby, assim:

elixir(function(mix) {
    mix.rubySass("app.sass");
});

Compile Sem Source Maps

elixir.config.sourcemaps = false;

elixir(function(mix) {
    mix.sass("app.scss");
});

Source maps são de fora da caixa. Como tal, para cada arquivo que é compilado, você encontrará um arquivo companheiro *.css.map no mesmo diretório. Este mapeamento permite que você, quando estiver debugando. trace seus seletores stylesheet compiladas de volta para o Sass original o Less parcial! Caso você precise desativar esta funcionalidade, no entanto, o código demostrativo acima fará a mágica.

Compile CoffeeScript

elixir(function(mix) {
    mix.coffee();
});

Isso pressupõe que seus arquivos Coffeescript são armazenados no diretório recursos / bens / coffee.

Compile Todos os Less and CoffeeScript

elixir(function(mix) {
    mix.less()
       .coffee();
});

Comece Testes PHPUnit

elixir(function(mix) {
    mix.phpUnit();
});

Comece Testes PHPSpec

elixir(function(mix) {
    mix.phpSpec();
});

Combine Stylesheets

elixir(function(mix) {
    mix.styles([
        "normalize.css",
        "main.css"
    ]);
});

Caminhos passados para este método são relativos ao diretório resources/css.

Combinar Stylesheets e salvar a um Directório Personalizado

elixir(function(mix) {
    mix.styles([
        "normalize.css",
        "main.css"
    ], 'public/build/css/everything.css');
});

Combinar Stylesheets partir de um diretório base personalizado

elixir(function(mix) {
    mix.styles([
        "normalize.css",
        "main.css"
    ], 'public/build/css/everything.css', 'public/css');
});

O terceiro argumento tanto parastyles e métodos scripts determinam o diretório relativo para todos os caminhos passados aos métodos.

Combine todos os estilos em um diretório

elixir(function(mix) {
    mix.stylesIn("public/css");
});

Combinar Scripts

elixir(function(mix) {
    mix.scripts([
        "jquery.js",
        "app.js"
    ]);
});

Novamente, isto pressupõe que todos os caminhos são relativos ao diretório resources/js.

Combine todos os scripts em um diretório

elixir(function(mix) {
    mix.scriptsIn("public/js/some/directory");
});

Combine vários conjuntos de Scripts

elixir(function(mix) {
    mix.scripts(['jquery.js', 'main.js'], 'public/js/main.js')
       .scripts(['forum.js', 'threads.js'], 'public/js/forum.js');
});

Versão / Use Hash em um Arquivo

elixir(function(mix) {
    mix.version("css/all.css");
});

Isto irá adicionar um hash exclusico para o nome do arquivo, permitindo cache-busting. Por exemplo, o nome do arquivo gerado irá parecer com algo assim: all-16d570a7.css.

Dentro das suas views, você pode usar a função elixir() para carregar apropriadamente ativo hash. Aqui vai um exemplo:

<link rel="stylesheet" href="{{ elixir("css/all.css") }}">

Por trás das cenas, a função elixir() irá determinar o nome do arquivo hash que deve ser incluído. Você sentiu o peso saindo dos seus ombros, não sentiu ?

Você pode também passar um array para o método version, para versionar arquivos múltiplos.

elixir(function(mix) {
    mix.version(["css/all.css", "js/app.js"]);
});
<link rel="stylesheet" href="{{ elixir("css/all.css") }}">
<script src="{{ elixir("js/app.js") }}"></script>

Copiar um arquivo para um novo local

elixir(function(mix) {
    mix.copy('vendor/foo/bar.css', 'public/css/bar.css');
});

Copie um diretório inteiro para um novo local

elixir(function(mix) {
    mix.copy('vendor/package/views', 'resources/views');
});

Comece Browserify

elixir(function(mix) {
    mix.browserify('index.js');
});

Quer requerer módulos no browser? Esperando usar EcmaScript 6(Javascript 6) mais cedo ou mais tarde? Precisa de um transformador JSX bulti-in(nativo)? Se sim, Browserify, juntamente com a tarefa Elixir browserify, isto irá lidar com esses trabalhos facilmente.

Esta tarefa assume que seus scripts estão armazenados no diretório resources/js, embora você seja livre para substituir o padrão.

Encademento de Métodos

Claro que, você pode encadear quase todos os Métodos Elixir juntos para contruir sua receita:

elixir(function(mix) {
    mix.less("app.less")
       .coffee()
       .phpUnit()
       .version("css/bootstrap.css");
});

Gulp

Agora que foi dito a você que para executar tarefas Elixir, você apenas precisar iniciar o Gulp por meio de linha de comando.

Executar todas tarefas registradas de uma vez

gulp

Verifique Mudanças nos Assets

gulp watch

Apenas Compile Scripts

gulp scripts

Apenas Compile Styles

gulp styles

Verifique Mudanças nos Testes e Classes PHP

gulp tdd

Nota: Todas tarefa irão assumir que estão no ambiente de desenvolvimento, e irão excluír minificação. No ambiente de produção, use o comando gulp --production.

Tarefas customizdas and Extensões

Algumas vezes, você pode querer ligar sua propria tarefas Gulp no Elixir. Talvez você tenha uma parte especial da funcionalidade que você gostaria que o Elixir misture e verifique para você. Sem problema!

Como exemplo, imagine que vocẽ tenha tarefas gerais que simplemente fale um pouco de texto quando chamado.

gulp.task("speak", function() {
    var message = "Tea...Earl Grey...Hot";

    gulp.src("").pipe(shell("say " + message));
});

Fácil suficiente. De uma linha de comando,você pode, claro, chamar gulp speak para iniciar a tarefa. Para adicionar isto ao Elixir, use o método mix.task().

elixir(function(mix) {
    mix.task('speak');
});

É isso ai! Agora, cada vez que você executar Gulp, sua tarefa customizada "speak" será executada jutamente de qualquer outra tarefa Elixir que você tenha misturado. Para adicionalmente retgistrar um verificador, então suas tarefas customizada irão ser reiniciadas cada vez um ou mais arquivos são modificado, você pode passar uma expressão regular como o segundo argumento.

elixir(function(mix) {
    mix.task('speak', 'app/**/*.php');
});

Adicionando isto como um segundo argumento, nos instruídmo o Elixir a reiniciar a tarefa "speak" cada vez que arquivos PHP no diretório "app/" é salvo.

Para ter ainda mais flexibilidade, você pode criar extensões Elixir completas. Usando o exemplo anteriro, você pode escrever extensões, assim:

var gulp = require("gulp");
var shell = require("gulp-shell");
var elixir = require("laravel-elixir");

elixir.extend("speak", function(message) {

    gulp.task("speak", function() {
        gulp.src("").pipe(shell("say " + message));
    });

    return this.queueTask("speak");

 });

Note que nos extendemos API do Elixir passando o nome que nos irémos referênciar dentro do nos arquivo Gulp, bem como uma função callback que irá criar uma tarefa Gulp.

Como Antes, ser você quiser suas tarefas customizadas sejam monitoradas, então registre um verificador.

this.registerWatcher("speak", "app/**/*.php");

Esta linha designa que quando qualquer arquivo que base com a expressão regular, app/**/*.php, é modificado, nos vamos querer inicar a tarefa speak.

É isto! Você pode tanto colocar isto no topo do seu arquivo Gulp(Gulpfile), ou invés extraia isso para um arquivo de tarefas customizado. Se você escolher pela última abordagem, simplesmente requira isto no seu arquivo Gulp(Gulpfile), assim:

require("./custom-tasks")

Você terminou! Agora, você pode misturar no.

elixir(function(mix) {
    mix.speak("Tea, Earl Grey, Hot");
});

Com esta adição, cada vez que você inicar o Gulp. Picard irá pedir um chá (oi?)