Configurando o ambiente com webpack

Ao concluir esta sessão o leitor estará apto a contruir um ambiente mais adequado ao desenvolvimento de
aplicações Angular 2 utilizando as facilidades oferecidas pela ferramenta Webpack

Um aspecto importante no desenvolvimento de aplicações Angular 2 e pouco explorado nos tutoriais e treinamentos no
framework está relacionado a construção e configuração do ambiente para a execução da aplicação. Em geral os
projetos são iniciados a partir de download das configurações básicas contendo as dependências necessárias
a execução da aplicação. Nesta sessão pretende-se oferecer ao leitor uma compreensão sobre a arquitetura
utilizada pelo framework buscando oferecer conhecimentos importantes para a construção de produtos de
melhor qualidade além de favorecer o entendimento dos mecanismos utilizados.

Criar uma pasta para o projeto contendo o subdiretorio src/app

mkdir -p exemplo/src/app
cd exemplo

Criar o arquivo de configuração da aplicação com o nome package.json, que fornece as informações de
dependências do projeto além de scripts de execução do npm, com o comando

npm init -f

Isso vai criar o arquivo que gerencia as dependências do projeto, package.json com o seguinte conteúdo:

{
  "name": "testeTreinameno",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

Inserir as dependências do Angular no arquivo e instala-las:

npm install @angular/common @angular/compiler @angular/core @angular/forms @angular/http @angular/platform-browser @angular/platform-browser-dynamic @angular/router core-js rxjs zone.js --save

Isso vai instalar as bibliotecas na pasta node_modules. O parâmetro --save vai colocar essas bibliotecas como dependência do projeto no arquivo package.json. Desse modo você não precisa guardar os módulos quando for armazenar o projeto no seu servidor onde há o gerenciador de versões. Quem baixar o projeto deverá execurar npm install, que por sua vez vai baixar os módulos npm conforme descrito no arquivo package.json.

Para instalar o transpilador, ferramenta que faz a conversão de uma linguagem para outra, da linguagem Typescript para Javascript
é necessário instalar a ferramenta typescript na sessão que mantem as informações das dependências para o ambiente de
desenvolvimento no arquivo package.json com o comando

npm install typescript typings --save-dev

Note o parâmetro --save-dev ao invés de --save. Isso vai colocar o módulo instalado em node_modules como dependência de desenvolvimento no package.json. Isso significa que o seu projeto precisa desse pacote para rodar durante o desenvolvimento, mas se você decidir tornar o projeto um módulo que possa ser instalado em outros projetos, esse módulo gerado não vai baixar as dependências de desenvolvimento quando for instalado.

Para garantir a validação de tipos em módulos desenvolvidos em Javascript é necessário o uso de uma ferramenta para
evitar problemas com o compilador typescript, para isso a demanda do uso da ferramenta typings.

npm install typings --save-dev

Para o uso no ambiente de desenvolvimento é recomendada a adoção de um servidor http capaz de processar os programas em
typescript sem a necessidade de uma nova compilação a cada alteração. Tal servidor fica monitorando o diretório do seu projeto por alterações, e atualiza a página do seu projeto em tempo real. Como recomendamos o uso do webpack como gerenciador de dependências de projeto, vamos instalar o servidor do webpack:

npm install webpack webpack-dev-server --save-dev

Para o correto funcionamento do Webpack é necessário que sejam instalados alguns complementos que fazem o processamento
de arquivos utilizados em aplicações web

npm install angular2-template-loader awesome-typescript-loader css-loader file-loader html-loader null-loader raw-loader style-loader to-string-loader --save-dev

Existem também plugins para o Webpack que fornecem funcionalidades que simplificam o processo de execução de aplicações
web em ambiente de desenvolvimento que podem ser instalados com o comando:

npm install html-webpack-plugin webpack-merge extract-text-webpack-plugin --save-dev

Apenas para facilitar o processo de exclusão de arquivos também será instaldo o módulo rimraf:

npm install rimraf --save-dev

Para uma organização padronizada dos arquivos de projetos Angular, este tutorial propõe a criação da seguinte estrutura de pastas:

  • src -- app --- assets ---- css ---- images

Para o uso da linguagem Typescript em conjunto com Javascript é necessário realizar algumas configurações que agregam
funcionalidades a ferramenta de transpilação. Uma maneira de realizar esta configuração é por meio dos seguintes comandos

typings install dt~core-js --save --global
typings install dt~node --save --global

Após suas execuções será criado o arquivo typings.json na pasta onde os comandos foram executados.

Para instalar os pacotes execute o comando

typings install

Configurando o Webpack

A execução da aplicação em ambiente de desenvolvimento depende de configurações do servidor Webpack. O arquivo
vendor.ts é utilizado para para importar os arquivos das dependências para a aplicação. Este arquivo deve
ser criado na pasta src com um conteúdo semelhante ao seguinte:

import '@angular/platform-browser';
import '@angular/platform-browser-dynamic';
import '@angular/core';
import '@angular/common';
import '@angular/http';
import '@angular/router';
import 'rxjs';

np

import 'core-js/es6';
import 'core-js/es7/reflect';
require('zone.js/dist/zone');
if (process.env.ENV === 'production') {
    // Production
} else {
   // Development
   Error['stackTraceLimit'] = Infinity;
   require('zone.js/dist/long-stack-trace-zone');
}

Para as configurações flexiveis do Webpack crie na pasta raiz o arquivo webpack.config.js, com o seguinte conteúdo

module.exports = require('./config/webpack.dev.js');

em seguida deve ser criado o diretório config onde serão mantidos os arquivos webpack.dev.js e webpack.common.js que
definirão o comportamento do servidor http.

Em webpack.common.js

var webpack = require('webpack');
var HtmlWebpackPlugin = require('html-webpack-plugin');
var ExtractTextPlugin = require('extract-text-webpack-plugin');

const path = require('path');
const rootDir = path.resolve(__dirname, '..');

module.exports = {
entry: {
    'polyfills': './src/polyfills.ts',
    'vendor': './src/vendor.ts',
    'app': './src/main.ts'
},

resolve: {
    extensions: ['.js', '.ts', '.json']
},

module: {
    loaders: [
        {
            test: /\.ts$/,
            loaders: ['awesome-typescript-loader', 'angular2-template-loader']
        },
        {
            test: /\.html$/,
            loader: 'html-loader'
        },
        {
            test: /\.(png|jpe?g|gif|svg|woff|woff2|ttf|eot|ico)$/,
            loader: 'file?name=assets/[name].[hash].[ext]'
        },
        {
           test: /\.css$/,
           loaders: ['to-string-loader', 'css-loader']
        }
    ]},

    plugins: [
        new webpack.optimize.CommonsChunkPlugin({
            name: ['app', 'vendor', 'polyfills']
        }),
        new HtmlWebpackPlugin({
            template: 'src/index.html'
        })
    ]
};

Em webpack.dev.js:

var webpackMerge = require('webpack-merge');
var ExtractTextPlugin = require('extract-text-webpack-plugin');
var commonConfig = require('./webpack.common.js');

const path = require('path');
const rootDir = path.resolve(__dirname, '..');

module.exports = webpackMerge(commonConfig, {

devtool: 'cheap-module-eval-source-map',

output: {
    path: path.resolve(rootDir, 'dist'),
    publicPath: 'http://localhost:7070/',
    filename: '[name].js',
        chunkFilename: '[id].chunk.js'
    },

    plugins: [
        new ExtractTextPlugin('[name].css')
    ],

    devServer: {
        historyApiFallback: true,
        stats: 'minimal'
    }
});

Construindo uma aplicação básica

Crie o arquivo main.ts na pasta src

import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module';
platformBrowserDynamic().bootstrapModule(AppModule);

Este arquivo faz referência ao app.module.ts que deve ser criado na pasta app

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
@NgModule({
    imports: [
        BrowserModule
    ],
    declarations: [
        AppComponent
    ],
    bootstrap: [ AppComponent ]
})
export class AppModule { }

O aquivo que contém as funcionalidades do componente, app.component.ts também fica na pasta app

import { Component } from '@angular/core';
import '../assets/css/styles.css';
@Component({
    selector: 'my-app',
    templateUrl: './app.component.html',
    styleUrls: ['./app.component.css']
})

export class AppComponent { }

Nele são apresentadas as dependencias de um arquivo html e outro css que contém o seguinte
conteúdo

Em app.component.html

<main>
    <h1>Hello from Angular Application with Webpack</h1>
</main>

e app.component.css

main {
    padding: 1em;
    font-family: Arial, Helvetica, sans-serif;
    text-align: center;
    margin-top: 50px;
    display: block;
}

Finalmente o arquivo html de inicio da aplicação index.html que deve ser criado na pasta src

<!DOCTYPE html>
<html>
<head>
    <title>Angular With Webpack</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
    <my-app>Loading...</my-app>
</body>
</html>
Insira os scripts para a execução do servidor no arquivo package.json

"scripts": {
    "start": "webpack-dev-server --inline --progress --port 7070",
    "postinstall": "typings install"
},

Para a traspilação é necessário realizar a configuração de alguns parâmetros que pode ser feito por meio da
criação e edição do arquivo tsconfig.json com o seguinte conteúdo

{
    "compilerOptions": {
        "target": "es5",
        "module": "commonjs",
        "moduleResolution": "node",
        "sourceMap": true,
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "removeComments": false,
        "noImplicitAny": true,
        "suppressImplicitAnyIndexErrors": true
    }
}

Para testar a aplicação use o comando

npm start

No endereço local da sua máquina na porta 7070, http://localhost:7070, estará disponível a aplicação criada.

Trabalhando com formulários

Conceitos de webservice

Integrando aplicação Angular 2 com webservices

Sobre o framework Demoiselle

Criando um webservice com Demoiselle 3

Demoiselle 3 e persistência

Implementando os módulos http e security do Demoiselle 3

O gerador de código (Angular 2 e Java) Demoiselle 3

Referências

https://www.tektutorialshub.com/angular-2-with-webpack-tutorial/

results matching ""

    No results matching ""