Laravel – Pré-processamento SASS/SCSS e JS

Que saudade que eu estava de falar do nosso querido, robusto e fascinante Laravel Framework! Bem, vamos cortar o deleite por aqui e nos focar no que interessa: resolvi escrever este post pois, observei que muitos desenvolvedores estão fazendo mal uso dos diretórios /public/js e /public/css, o buraco é bem mais embaixo, porém, neste post vamos nos limitar a estes dois diretórios e sua forma de uso.

Pré-requisitos

No tópico “Dicas” descrevo orientações quanto a instalação dos requisitos listados abaixo:

  • Interpretador PHP;
  • Composer; e
  • Node.js (com NPM ou Yarn).

Dicas

A instalação dos componentes acima é bem simples, seja no Windows, Linux ou MacOS.

Obs: gostaria de deixar claro que para rodar o Laravel (na verdade qualquer aplicação PHP) em ambientes de desenvolvimento, não precisamos do Apache ou Nginx, o PHP possui um servidor web embarcado que atende perfeitamente a essa necessidade encontrada durante as fases de desenvolvimento.

Caso precise de ajuda para instalar o PHP ou Composer, assista a este vídeo que preparei algum tempo atrás: https://youtu.be/zOAPiK1xg8Y. Recomendo que instale a última versão estável do PHP, os passos para instalação são os mesmos descrito no vídeo mencionado acima.

Já para o Node.js, recomendo que faça a instalação via NVM (Node Version Manager), uma abordagem inteligente que te dará flexibilidade ao permitir trabalhar com múltiplas versões do Node. Calma, o processo é bem simples, porém, para te ajudar eu preparei este tutorial: http://fabiojanio.com/2019/08/28/nvm-gerencie-multiplas-instalacoes-do-node-js/

O começo de tudo

Vamos lá, se você chegou até aqui estou pressupondo que você:

  • Já instalou o PHP, Composer, Node.js, NPM ou Yarn; e
  • Possui ao menos noções básicas no desenvolvimento com Laravel.

Por conta do que foi dito acima, não irei descrever os passos para instalação das ferramentas supracitadas, uma vez que o objetivo central deste post é demonstrar como lidar com arquivos scss/sass e js dentro da estrutura do Laravel Framework, de modo a não manipular diretamente os diretórios /public/css/* e /public/js/*, o que é considerada uma prática ruim.

Partiu Laravel

Se você já utilizou o Composer para instalar o Laravel, bem, do contrário permita-me te ajudar via Docker:

docker run --rm -v $(pwd):/app fabiojanio/php composer create-project --prefer-dist laravel/laravel nome-do-seu-app-aqui

Como premissa básica você precisa ter o Docker instalado para poder executar a instrução acima, ou então fazer a instalação de forma tradicional como sempre fez. Em resumo, a instrução acima irá criar no diretório atual um novo diretório “nome-do-seu-app-aqui” com a instalação do Laravel.

Para executar o Laravel você pode seguir sua abordagem tradicional, porém, se novamente me permite te ajudar, utilize essa instrução:

docker run --rm -v $(pwd):/app -d -p 80:80 --name nome-do-seu-app-aqui fabiojanio/php php -S 0.0.0.0:80 -t public

Em resumo, estamos criando um novo container temporário e iniciando o servidor embarcado do PHP na porta 80. Agora é só chamar http://localhost no navegador :)

Pré-processar SASS/SCSS e JS

Vamos começar instalando as dependências do Node.js:

npm i

Pronto. Agora podemos pré-compilar! Uuuhulll! Vamos fazer um teste simples. Execute:

npm run dev

Na primeira execução o processo irá demorar um pouco, isso ocorre pois o npm irá instalar mais algumas dependências necessárias. Por fim você terá algo como:

Resultado do processo de pré-compilação.

A imagem acima mostra quais foram os arquivos envolvidos no processo e qual seu tamanho final (calma, nada de sustos, o tamanho final após executar o comando de produção será infinitamente menor). Se por acaso você excluir os arquivos que estão em /public/css/* e /public/js/* e rodar a instrução npm run dev novamente, verá que os arquivos foram recriados.

Reforçando, você não deve mexer diretamente em /public/css e nem em /public/js. Se precisar alterar um arquivo css você deve mexer em /resources/sass/* e se for js em /resources/js/*. Posteriormente basta reexecutar o comando para gerar os arquivos pré-compilados. Legal não é!?

Mas pera lá? Toda vez que mexer em um arquivo de estilo ou javascript devo salvar e rodar um comando para criar a versão final? Claro que não, isso seria muito chato, afinal de contas somos desenvolvedores, queremos é simplificar a vida! Te apresento o:

npm run watch

Agora você pode alterar os arquivos contidos em /resources/sass/* e /resources/js/* a vontade, sempre que salvar o arquivo o npm irá automaticamente disparar o processo de compilação em background. Que coisa linda!

Mas e aquele comando que gera o build (pré-compilação) de produção? Vamos a ele:

npm run prod

Agora teremos arquivos infinitamente menores. Isso ocorre pois a instrução de produção aplica algumas técnicas de mimificação de arquivos, além de outras convenções utilizadas para escopo de produção. Se você for lá no /public/css e editar um arquivo, verá que ele tá bem “feinho”, tudo em uma linha, sem comentários, salvo o comentário contendo a licença de uso…

Resultado após compilação com parâmetro de produção.

Realmente ficou bem menor em? Compare com a imagem anterior para se surpreender.

Finalizando

Como essa mágica acontece? O responsável por isso é o Laravel-mix, uma solução que nativamente já vem integrada com o Laravel Framework.

Veja esse artigo que escrevi mostrando como usar o Laravel-mix: http://fabiojanio.com/2019/04/15/laravel-mix-para-pre-processamento-scss-sass-less-js-e-import-alone-do-bootstrap/

Lembre-se: o Laravel-mix pode ser utilizado tanto dentro de um projeto Laravel, no qual já vem nativamente integrado e configurado, como em um projeto onde o Laravel Framework não é usado.

As definições do Laravel-mix ficam registradas no arquivo webpack.mix.js na raiz do projeto.