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.