Parcel Bundler: Criando um projeto React

Nós temos um novo jogador em campo! Que promete um projeto “com zero de configurações”. O conceito do Parcel Bundler é parecido com o do Ruby on Rails. Assumindo convenções de arquivos e pastas, escondendo boa parte do *tooling, *deixando o seu foco para, exclusivamente, sua aplicação! [Como sempre, o Twitter está indo a loucura!](https://mobile.twitter.com/search?q=Parcel
Parcel Bundler: Criando um projeto React

Nós temos um novo jogador em
campo
!
Que promete um projeto “com zero de
configurações”
.
O conceito do Parcel Bundler é parecido com o do Ruby on Rails.

Assumindo convenções de arquivos e pastas, escondendo boa parte do *tooling,
*deixando o seu foco para, exclusivamente, sua aplicação!

[Como sempre, o Twitter está indo a
loucura!](https://mobile.twitter.com/search?q=Parcel Bundler&src=typed_query)

Fiz o teste em alguns projetos que utilizam ferramentas como Babel,
TypeScript/FlowType, CSS Modules, Styled Components, React
Material-UI
, e funcionou muito bem!

Para pequenos e médios projetos, é uma solução e tanto! E quais as vantagens que
o Parcel Bundler trás?

  • A perforamnce de compilação/build é rápida, muito rápida!!1 🚀🚀🚀
  • Code Splitting com a sintaxe import()
  • Hot Module Replacement já configurado 🔥
  • Configuração dev e prod out of the box!!1 😎

Configurando um projeto React 👾

Abaixo, vamos ver o passo a passo para criar um exemplo para uma aplicação
React.

Vamos criar nossa pasta de exemplo e pedir ao npm para criar o package.json:

mkdir parcel-react-example
cd parcel-react-example
npm init -y

Instalando as dependências:

mkdir parcel-react-example
cd parcel-react-example
npm init -y

Vamos adicionar o nosso arquivo .babelrc:

{
  "presets": ["react-app"]
}

E agora,vamos criar nosso arquivo de entrada.

A mágica do arquivo de entrada ⭐️

Se assim como eu, você é fã do webpack, (っ◕‿◕)っ, estamos acostumados a criar os
pontos de entrada (entry points), utilizando arquivos .js.

O Parcel Bundler tem uma outra abordagem. Ele, na verdade, pode receber
qualquer tipo de arquivo como ponto de entrada
.

E uma mágica bacana, é usar um arquivo .html. Vamos supor que você faça o link
do seu arquivo .js no HTML:

// index.html


  


E no arquivo JavaScript:

// index.js
console.log(`Hello ${"World"}`);

Parcel Bundler irá processar esse arquivo JavaScript mencionado e, como
configuramos Babel acima, irá utilizar todos os transforms e presets. Ele
irá gerar os arquivos finais com o caminho relativo ao arquivo HTML.

Por exemplo:

Para cada tipo de transforms ou plugins (Babel,
PostCSS,
PostHTML, etc) um tipo de asset será
transformado. Sem a necessidade de criar nada além de um caminho relativo ao
HTML. É bem incrível!

Você pode saber mais na documentação oficial de
transforms
.

Voltando ao nosso exemplo 🏠

Continuando de onde paramos, atualmente temos:

// ls -la parcel-react-example
.babelrc
node_modules
package-lock.json
package.json

Vamos criar nosso ponto de entrada com um arquivo HTML:

E vamos adicionar:



  
  
  
  Parcel React Example


  

E agora… tente sair do vim 😂

Como essa é uma aplicação React, vamos criar nosso JavaScript:

E adicionar:

import React from 'react';
import ReactDOM from 'react-dom';
const App = () => 
Hello Parcel x React
; ReactDOM.render(, document.getElementById('root')); if (module.hot) { module.hot.accept(); }

E para finalizar, vamos adicionar ao nosso package.json os scripts de
desenvolvimento e build:

...
"scripts": {
  "start": "NODE_ENV=development parcel index.html",
  "build": "NODE_ENV=production parcel build index.html --no-minify"
},
…

E agora, você já sabe o caminho!


Emojis, boas mensagens de erro, tudo no seu devido lugar!

Ah, cheguei a falar que Parcel já vem com um servidor de desenvolvimento por
padrão? 😉 Não precisa das loucuras do webpack-dev-server e etc.

Só abrir o endereço https://localhost:1234** **no seu
navegador!

Finalizando

Parcel Bundler trás muita coisa boa para o
*(não-)*concorrido mundo de empacotadores de projetos. Principalmente hoje em
dia, onde temos N configurações, um projeto que valorize algumas convenções, é
muito bem vindo.

Funciona para todos os projetos? É claro que não! 😁

Ainda vou continuar com meu webpack.config.{ENV}.js, até porque, o
V4
está quase saindo do forno 🔥

Se você quiser conferir o exemplo completo, pode olhar nesse
repositório
.

Obrigado! 🙏

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *