Perseguindo os padrões da Web

Já falamos sobre os problemas que enfrentamos ao desenvolver o front-end em 2018. Vamos ver o quão longe vamos dos padrões quando escrevemos nosso código



e como podemos resolver esse problema.


Os navegadores modernos podem fazer muito, eles entendem o ES6, suportam os módulos do ES, fornecem ferramentas convenientes para o desenvolvimento e a depuração. Mas isso é suficiente e estamos usando todos esses meios efetivamente?

Vamos destacar as principais diferenças entre nosso código fonte e o código que baixamos em nosso navegador:

O código é entregue em um arquivo - embora todos os navegadores modernos entendam o formato dos módulos ES, a maioria das ferramentas de desenvolvimento cola nosso código em um arquivo grande.

Novos recursos do javascript - de acordo com a tabela de compatibilidade, apenas as versões mais recentes da área de trabalho do chrome suportam 100% das novas propriedades do idioma (e apenas uma parte das propriedades experimentais), outros navegadores precisam de transpilação e polifiles para propriedades ausentes.

@Component() class Toolbar {} 

Novos recursos do css - cssdb contém uma lista de propriedades css suportadas por navegadores modernos; o restante deve ser compilado.

 @media (480px <= width < 768px) {} 

Módulos Commonjs - o formato do módulo nativo para node.js, apesar de sua popularidade e prevalência, não é suportado por nenhum navegador e precisa ser convertido (os módulos ES são suportados por novas versões do node.js no modo experimental , a maioria das bibliotecas ainda é entregue no formato Commonjs).

 const component = require('./component'); module.exports = function() {}; 

Importação simples - (importação começando com o nome do pacote), os navegadores não são suportados, o trabalho está em andamento em um rascunho padrão (como alternativa, agora você pode consolidar as importações no node.js e nos navegadores usando os módulos ES e redefinindo o carregador do módulo node.js para trabalhar com caminhos absolutos, como / node_modules / lodash / lib / get.js, mas a maioria das bibliotecas não).

 import get from 'lodash/get'; 

A importação de módulos internos - também não suportados em navegadores, requer substituição pelas bibliotecas.

 import zlib from 'zlib'; 

Reestruturação das importações - estamos acostumados a importar qualquer coisa de qualquer lugar sem nos preocuparmos com a exportação do valor que queremos:

 import { Component } from 'react'; 

de fato, a biblioteca exporta um único objeto React que contém a propriedade Component, não um conjunto de propriedades como você imagina.

A importação de formatos de terceiros (css, json, etc.) - não é suportada por navegadores e, aparentemente, não será (exceto para a importação wasm ).

 import './style.css'; 

Declarações de tipo - o texto datilografado e o fluxo se tornaram muito populares e ajudam no desenvolvimento de grandes bibliotecas, mas não têm suporte nos navegadores.

 const a: number = 1; 

Metalinguagens - scss, sass, less, typescript, coffeescript, pug não são padrão e requerem compilação.

 <style type=”text/scss”> .logo { color: white; &.active { color: red; } } </style> 

Os modelos Jsx não são padrão e devem ser convertidos usando createElement:

 const element = <h1>Hello, world!</h1>; 

Modelos do Vue - enquanto se inspiram em componentes da web, também não são padrão:

 <template> <div>This will be pre-compiled</div> </template> <script src="./my-component.js"></script> <style src="./my-component.css"></style> 

Caminhos relativos em componentes da Web - se você estiver acostumado a dividir seus componentes em modelos e estilos de scripts, saberá que os caminhos estão anexados à raiz do projeto e o componente se torna impossível de transferir e difícil de reutilizar em outros projetos.

 fetch('./my-button.html'); 

Se você estiver trabalhando com Angular:

Injeção de Dependência - implementada usando reflexos e metadados do decorador, requer compilação.

Carregamento de estilo dinâmico via http - a estrutura não suporta esse recurso imediatamente.

Como você pode ver, a web com a qual estamos acostumados está longe do padrão, embora aspire parcialmente. A tarefa do hq é suavizar essa diferença até que muitas coisas sejam padrão e outras não sejam mais usadas. O hq é um servidor tão inteligente que torna seu código um pouco mais claro para o navegador, enquanto converte apenas o mínimo necessário e não junta tudo. Portanto, independentemente da tecnologia e estrutura escolhidas, o hq faz todo esse trabalho de rotina para garantir a compatibilidade e permite iniciar o desenvolvimento imediatamente.

Quais outros benefícios o hq oferece?

  • Falta de configuração
  • Depuração aprimorada devido à ausência de pacotes configuráveis
  • O código no navegador é o mais próximo possível da fonte
  • Estrutura simples do projeto refletida no navegador
  • Todas as dependências do projeto são visíveis, quem carrega o quê, por que e quando
  • Uso completo das ferramentas do navegador: carregamento / depuração / cobertura de código
  • Operação muito rápida do servidor
  • Usando padrões, o hq funciona como um servidor estático comum

Experimente o hq agora:

 npm i -g @hqjs/hq 


e, em seguida, execute na raiz do projeto:

 hq 


PS: Agradecemos a justboris pelos valiosos comentários no artigo anterior.

Source: https://habr.com/ru/post/pt432008/


All Articles