Procure nos sites oficiais e instale no seu computador. Para verificar se já estão instalados em seu sistema abra o terminal e rode:
node -v
npm -v
yarn -v
exemplo:
project
└── src
└── example.js
yarn init -y
npm init -y
O comando irá criar um package.json com as informações necessárias para executar novas dependências:
project ├── src │ └── example.js └── package.json
O package.json será o responsável por listar e verificar o versionamento, assim como, os pacotes dependentes da aplicação.
Uma das mudanças da versão 6 para a versão 7 é o uso de pacotes com escopo. Pacotes com escopo são instalados através de @escopoDomodulo/módulo, podendo escolher dependências mais enxutas para a aplicação.
Para testes iremos instalar as seguintes dependências:
yarn add @babel/cli @babel/core -D
npm install @babel/cli @babel/core -D
yarn add @babel/preset-env -D
Vale ressaltar que o parâmetro '-D' é necessário para esta aplicação, pois será ele que irá fazer com que os pacotes instalados sejam dependências de desenvolvimento e não de produção.
Desta forma:
"devDependencies": {
"@babel/cli": "^7.8.4",
"@babel/core": "^7.9.0"
}Basicamente a diferença entre as dependências de desenvolvimento e de produção são que a de produção serão criadas junto à aplicação e as de desenvolvimento (com o parâmetro '-D') serão compiladas apenas no momento de desenvolvimento junto ao webpack, usando online apenas o ./bundle.js.
project ├── src │ └── example.js ├── package.json └── index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script src="./bundle.js"></script> <!-- Especifique aqui o local de saida do bundle-->
</body>
</html>Crie um arquivo na raiz do projeto chamado .babelrc:
project ├── src │ └── example.js ├── package.json ├── index.html └── .babelrc
Edite seu conteúdo acrescentando a seguinte configuração:
{
"presets": ["@babel/preset-env"] // Configura o ambiente do babel automatizando
// para o melhor ambiente de transpilação
}O código do arquivo package.json até então estará assim:
{
"name": "webpack_test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"@babel/cli": "^7.8.4",
"@babel/core": "^7.9.0",
"@babel/preset-env": "^7.9.0"
}
}Acrescente no objeto "scripts" o script necessário para rodar o babel:
"scripts": {
- "test": "echo \"Error: no test specified\" && exit 1"
+ "dev": "babel ./src/exemple.js -o ./bundle.js"
},Iremos executar o resultado da compilção na raiz mesmo, com a finalidade de apenas testar o recurso.
Outra funcionalidade interessante é acrescentar o parâmetro "-w" ao final do script. Esta funcionalidade irá tornar automática as alterações a cada save do código.
Ficando o script desta forma:
"dev": "babel ./src/exemple.js -o ./bundle.js -w"class Teste {
metodo() {
}
}Para executar todo o código criado devemos chamar no terminal correspondente a pasta do projeto o script criado 'dev':
$ npm run dev
$ yarn dev
A saída será desta forma no arquivo ./bundle.js:
"use strict";
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
alert('opa');
var Teste = /*#__PURE__*/function () {
function Teste() {
_classCallCheck(this, Teste);
}
_createClass(Teste, [{
key: "metodo",
value: function metodo() {}
}]);
return Teste;
}();O webpack será o responsável por trabalhar com vários arquivos .js no seu projeto, transpilando em um arquivo, ou alguns arquivos de saída como o './bundle.js'.
Para adicionar como dependência basta rodar o seguinte comando no terminal do projeto:
yarn add webpack webpack-cli -D
npm install webpack webpack-cli -D
Nesse momento crie um arquivo com o nome 'webpack.config.js':
project ├── src │ └── example.js ├── package.json ├── index.html ├── .babelrc └── webpack.config.js
Basicamente a sintaxe de configuração do webpack consiste em um arquivo de entrada e saída com parâmetros (regras) que irão filtrar ou executar tarefas específicas do projeto:
const path = require('path'); // Define a constanteconst path = require('path');
module.exports = {}; // Exporta a configuraçãoconst path = require('path');
module.exports = {
entry: './src/exemple.js', // Cria o arquivo de entrada (JSX ou ES6)
};const path = require('path');
module.exports = {
entry: './src/exemple.js',
output: {}, // Configura a saída
};const path = require('path');
module.exports = {
entry: './src/exemple.js',
output: {
filename: 'bundle.js', // Especifica o nome do arquivo
},
};const path = require('path');
module.exports = {
entry: './src/exemple.js',
output: {
filename: 'bundle.js',
path: __dirname, // Especifica a localização da saída
},
};Caso necessite a saída em alguma pasta em específica basta chamar o objeto 'resolve':
const path = require('path');
module.exports = {
entry: './src/exemple.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist'), // Aqui será sua saída
},
};const path = require('path');
module.exports = {
entry: './src/exemple.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist'),
},
module: {}, // Criação do module
};As rules serão as regras que irão dizer como o webpack deve se comportar quando o usuário importar novos arquivos .js.
(...) // Código acima
module: {
rules: [
],
},
(...) // Código abaixoO 'test' será responsável por pegar todos os arquivos .js, dessa forma criamos uma expressão regular de identificação no qual irá 'capturar' todos os arquivos com final .js:
(...)
module: {
rules: [
{
test: /\.m?js$/,
}
],
},
(...)O 'exclude' será o filtro responsável por não executar pastas que não desejamos como 'node_modules':
(...)
module: {
rules: [
{
test: /\.m?js$/,
exclude: /(node_modules|bower_components)/,
}
],
},
(...)Por fim será necessário especificar o preset para o @babel/preset-env, esta função será a mesma usada no '.babelrc':
const path = require('path');
module.exports = {
entry: './src/exemple.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist'),
},
module: {
rules: [
{
test: /\.m?js$/,
exclude: /(node_modules|bower_components)/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env']
}
}
}
],
},
};Desta forma temos como resultado:
const path = require('path');
module.exports = {
entry: './src/exemple.js',
output: {
path: __dirname,
filename: 'bundle.js',
},
module: {
rules: [
{
test: /\.m?js$/,
exclude: /(node_modules|bower_components)/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env']
}
}
}
],
},
}; npm install babel-loader -D
yarn add babel-loader -D
"scripts": {
- "dev": "babel ./src/exemple.js -o ./bundle.js"
+ "dev": "npx webpack --mode=development -w"
},O parâmetro '--mode=development' será responsável por recompilar a cada save durante o desenvolviemento, já o '-w' irá verificar as alterações através do webpack.
Execute o seguinte comando no terminal:
$ npm run dev
$ yarn dev
Após as configurações acima basta que abra o index.html no live server, as modificações feitas pelo arquivo de entrada serão modificadas em conjunto com o './bundle.js'.