Bibliotecas de clientes e fluxo de trabalho de front-end client-side-libraries
Saiba como as bibliotecas do lado do cliente, ou clientlibs, são usadas para implantar e gerenciar o CSS e o JavaScript para uma implementação do Adobe Experience Manager (AEM) Sites. Este tutorial também aborda como o módulo ui.frontend, um projeto do webpack dissociado, pode ser integrado ao processo de compilação de ponta a ponta.
Pré-requisitos prerequisites
Consulte as ferramentas e instruções necessárias para configurar um ambiente de desenvolvimento local.
Também é recomendável revisar o tutorial Noções básicas dos componentes para entender os fundamentos das bibliotecas do lado do cliente e do AEM.
Projeto inicial
Confira o código de linha de base no qual o tutorial se baseia:
-
Confira a ramificação
tutorial/client-side-libraries-startdo GitHubcode language-shell $ cd aem-guides-wknd $ git checkout tutorial/client-side-libraries-start -
Implante a base de código em uma instância do AEM local, usando as suas habilidades do Maven:
code language-shell $ mvn clean install -PautoInstallSinglePackagenote note NOTE Se estiver usando o AEM 6.5 ou 6.4, anexe o perfil classica qualquer comando do Maven.code language-shell $ mvn clean install -PautoInstallSinglePackage -Pclassic
É sempre possível exibir o código concluído no GitHub ou conferir o código localmente, alternando-se para a ramificação tutorial/client-side-libraries-solution.
Objetivos
- Entender como as bibliotecas do lado do cliente são incluídas em uma página por meio de um modelo editável.
- Aprender a usar o módulo
ui.frontende um servidor de desenvolvimento do webpack para desenvolvimento de front-end dedicado. - Entender o fluxo de trabalho de ponta a ponta de entrega de CSS e JavaScript compilados para uma implementação do Sites.
O que você criará what-build
Neste capítulo, você adicionará alguns estilos de linha de base para o site da WKND e o modelo de página de artigo para aproximar a implementação das simulações de design da IU. Você usará um fluxo de trabalho avançado de front-end para integrar um projeto do webpack em uma biblioteca do cliente do AEM.
Página de artigo com estilos de linha de base aplicados
Fundo background
As bibliotecas do lado do cliente fornecem um mecanismo para organizar e gerenciar arquivos CSS e JavaScript necessários para uma implementação do AEM Sites. As metas básicas para as bibliotecas do lado do cliente, ou clientlibs, são:
- Armazenar o CSS/JS em arquivos pequenos separados para facilitar o desenvolvimento e a manutenção.
- Gerenciar dependências em estruturas de terceiros de maneira organizada.
- Minimizar o número de solicitações do lado do cliente, concatenando o CSS/JS em uma ou duas solicitações.
Mais informações sobre o uso de bibliotecas do lado do cliente podem ser encontradas aqui.
As bibliotecas do lado do cliente têm algumas limitações. Mais notavelmente, a compatibilidade é limitada com linguagens de front-end famosas, como Sass, LESS e TypeScript. No tutorial, vamos ver como o módulo ui.frontend pode ajudar a resolver isso.
Implante a base de código inicial em uma instância do AEM local e navegue até http://localhost:4502/editor.html/content/wknd/us/en/magazine/guide-la-skateparks.html. Esta página não foi estilizada. Vamos implementar bibliotecas do lado do cliente para a marca da WKND a fim de adicionar o CSS e o JavaScript à página.
Organização de bibliotecas do lado do cliente organization
A seguir, vamos explorar a organização das clientlibs geradas pelo Arquétipo de projeto do AEM.
Organização das bibliotecas do lado do cliente com diagramas de alto nível e inclusão de páginas
-
Usando o VSCode ou outro IDE, abra o módulo ui.apps.
-
Expanda o caminho
/apps/wknd/clientlibspara exibir as clientlibs geradas pelo arquétipo.
Na seção abaixo, essas clientlibs serão analisadas mais a fundo.
-
A tabela a seguir resume as bibliotecas de clientes. Mais detalhes sobre a inclusão de bibliotecas de clientes podem ser encontrados aqui.
table 0-row-3 1-row-3 2-row-3 3-row-3 4-row-3 Nome Descrição Notas clientlib-baseNível básico do CSS e do JavaScript necessário para o funcionamento do site da WKND incorpora bibliotecas de clientes dos componentes principais clientlib-gridGera o CSS necessário para que o Modo de layout funcione. Os pontos de quebra para dispositivos móveis/tablets podem ser configurados aqui clientlib-siteContém um tema específico para o site da WKND Gerado pelo módulo ui.frontendclientlib-dependenciesIncorpora qualquer dependência de terceiros Gerado pelo módulo ui.frontend -
Observe que
clientlib-siteeclientlib-dependenciessão ignorados no controle do código-fonte. Isso é intencional, já que são gerados no momento da compilação pelo móduloui.frontend.
Atualizar estilos básicos base-styles
Em seguida, atualize os estilos básicos definidos no módulo ui.frontend. Os arquivos do módulo ui.frontend geram as bibliotecas clientlib-site e clientlib-dependecies, que contêm o tema do site e quaisquer dependências de terceiros.
As bibliotecas do lado do cliente não são compatíveis com linguagens mais avançadas, como Sass ou TypeScript. Há várias ferramentas de código aberto, como o NPM e o webpack, que aceleram e otimizam o desenvolvimento de front-end. O objetivo do módulo ui.frontend é poder usar essas ferramentas para gerenciar a maioria dos arquivos de origem de front-end.
-
Abra o módulo ui.frontend e navegue até
src/main/webpack/site. -
Abra o arquivo
main.scss
main.scssé o ponto de entrada para arquivos Sass no móduloui.frontend. Ele inclui o arquivo_variables.scss, que contém uma série de variáveis da marca a serem usadas em diferentes arquivos Sass no projeto. O arquivo_base.scsstambém está incluído e define alguns estilos básicos para elementos HTML. Uma expressão regular inclui os estilos de componentes individuais emsrc/main/webpack/components. Outra expressão regular inclui os arquivos emsrc/main/webpack/site/styles. -
Inspecione o arquivo
main.ts. Ele incluimain.scsse uma expressão regular para coletar quaisquer arquivos.jsou.tsno projeto. Este ponto de entrada é usado pelos arquivos de configuração do webpack como ponto de entrada para todo o móduloui.frontend. -
Inspecione os arquivos abaixo de
src/main/webpack/site/styles:
Estes arquivos definem estilos para elementos globais do modelo, como cabeçalho, rodapé e container de conteúdo principal. As regras de CSS nesses arquivos destinam-se a diferentes elementos HTML:
header,mainefooter. Esses elementos HTML foram definidos por políticas no capítulo anterior, Páginas e modelos. -
Expanda a pasta
componentsemsrc/main/webpacke inspecione os arquivos.
Cada arquivo é mapeado para um componente principal, como o componente de acordeão. Cada componente principal é criado com o Modificador de elementos de bloco ou a notação BEM para facilitar o direcionamento a classes de CSS específicas com regras de estilo. Os arquivos abaixo de
/componentsforam compactados pelo arquétipo de projeto do AEM com as diferentes regras de BEM para cada componente. -
Baixe o arquivo de estilos básicos da WKND wknd-base-style-src-v3.zip e descomprima o arquivo.
Para acelerar o tutorial, vários arquivos Sass que implementam a marca da WKND com base nos componentes principais e na estrutura do modelo de página de artigo são fornecidos.
-
Substitua o conteúdo de
ui.frontend/srcpelos arquivos da etapa anterior. O conteúdo do zip deve substituir as seguintes pastas:code language-plain /src/main/webpack /components /resources /site /static
Inspecione os arquivos alterados para ver os detalhes da implementação do estilo da WKND.
Inspecionar a integração ui.frontend ui-frontend-integration
Uma peça-chave da integração incorporada ao módulo ui.frontend, o aem-clientlib-generator pega os artefatos de CSS e JS compilados de um projeto do webpack/npm e transforma-os em bibliotecas do lado do cliente do AEM.
O arquétipo de projeto do AEM configura automaticamente esta integração. Em seguida, descubra como ela funciona.
-
Abra um terminal de linha de comando e instale o módulo ui.frontend, usando o comando
npm install:code language-shell $ cd ~/code/aem-guides-wknd/ui.frontend $ npm installnote note NOTE A execução de npm installé necessária apenas uma vez, como depois de um novo clone ou geração do projeto. -
Abra
ui.frontend/package.jsone, no comando scripts start, adicione--env writeToDisk=true.code language-json { "scripts": { "start": "webpack-dev-server --open --config ./webpack.dev.js --env writeToDisk=true", } } -
Inicie o servidor de desenvolvimento do webpack no modo watch, executando o seguinte comando:
code language-shell $ npm run watch -
Isso compila os arquivos de origem do módulo
ui.frontende sincroniza as alterações com o AEM em http://localhost:4502code language-shell + jcr_root/apps/wknd/clientlibs/clientlib-site/js/site.js + jcr_root/apps/wknd/clientlibs/clientlib-site/js + jcr_root/apps/wknd/clientlibs/clientlib-site + jcr_root/apps/wknd/clientlibs/clientlib-dependencies/css.txt + jcr_root/apps/wknd/clientlibs/clientlib-dependencies/js.txt + jcr_root/apps/wknd/clientlibs/clientlib-dependencies http://admin:admin@localhost:4502 > OK + jcr_root/apps/wknd/clientlibs/clientlib-site/css + jcr_root/apps/wknd/clientlibs/clientlib-site/js/site.js http://admin:admin@localhost:4502 > OK -
O comando
npm run watchpreenche o clientlib-site e as clientlib-dependencies no módulo ui.apps, que é sincronizado automaticamente com o AEM.note note NOTE Também há um perfil npm run prodque minimiza o JS e o CSS. Essa é a compilação padrão sempre que a compilação do webpack é acionada por meio do Maven. Mais detalhes sobre o módulo ui.frontend podem ser encontrados aqui. -
Inspecione o arquivo
site.cssabaixo deui.frontend/dist/clientlib-site/site.css. Este é o CSS compilado com base nos arquivos Sass de origem.
-
Inspecione o arquivo
ui.frontend/clientlib.config.js. Este é o arquivo de configuração de um plug-in npm, aem-clientlib-generator, que transforma o conteúdo de/distem uma biblioteca do cliente e a move para o móduloui.apps. -
Inspecione o arquivo
site.cssno módulo ui.apps, emui.apps/src/main/content/jcr_root/apps/wknd/clientlibs/clientlib-site/css/site.css. Esta deve ser uma cópia idêntica do arquivosite.cssdo módulo ui.frontend. Agora que está no módulo ui.apps, ele pode ser implantado no AEM.
note note NOTE Como o clientlib-site é compilado durante o tempo de compilação, usando npm ou maven, ele pode ser ignorado com segurança no controle do código-fonte, no módulo ui.apps. Inspecione o arquivo .gitignoreabaixo de ui.apps. -
Abra o artigo “LA Skatepark” no AEM, em: http://localhost:4502/editor.html/content/wknd/us/en/magazine/guide-la-skateparks.html.
Agora você verá os estilos atualizados no artigo. Talvez seja necessário fazer uma atualização permanente para limpar todos os arquivos CSS armazenados em cache pelo navegador.
Está começando ficar muito parecido com as simulações!
note note NOTE As etapas executadas acima para criar e implantar o código ui.frontend no AEM são executadas automaticamente quando uma compilação do Maven é acionada a partir da raiz do projeto mvn clean install -PautoInstallSinglePackage.
Fazer uma alteração de estilo
Em seguida, faça uma pequena alteração no módulo ui.frontend para ver o npm run watch implantar automaticamente os estilos na instância do AEM local.
-
No módulo
ui.frontend, abra o arquivo:ui.frontend/src/main/webpack/site/_variables.scss. -
Atualize a variável de cor
$brand-primary:code language-scsss //== variables.css //== Brand Colors $brand-primary: $pink;Salve as alterações.
-
Retorne ao navegador e atualize a página do AEM para ver as atualizações:
-
Reverta a alteração para a cor
$brand-primarye interrompa a compilação do webpack, usando o comandoCTRL+C.
Inclusão de página e modelo page-inclusion
Em seguida, vamos analisar como as clientlibs são referenciadas na página do AEM. Uma prática recomendada comum no desenvolvimento web é incluir o CSS no cabeçalho do HTML <head> e no JavaScript logo antes de fechar a tag </body>.
-
Navegue até o modelo de página de artigo em http://localhost:4502/editor.html/conf/wknd/settings/wcm/templates/article-page/structure.html
-
Clique no ícone Informações da página e, no menu, selecione Política da página para abrir a caixa de diálogo Política da página.
Informações da página > Política da página
-
Observe que as categorias de
wknd.dependenciesewknd.siteestão listadas aqui. Por padrão, as clientlibs configuradas por meio da política da página são divididas para incluir o CSS no cabeçalho da página e o JavaScript no fim do corpo. Você pode listar explicitamente que o JavaScript da clientlib seja carregado no cabeçalho da página. Esse é o caso dewknd.dependencies.
note note NOTE Também é possível referenciar wknd.siteouwknd.dependenciesdiretamente a partir do componente de página, usando-se o scriptcustomheaderlibs.htmloucustomfooterlibs.html. O uso do modelo proporciona flexibilidade, para que você possa escolher quais clientlibs serão usadas por modelo. Por exemplo, se você tiver uma biblioteca de JavaScript pesada que só será usada em um modelo selecionado. -
Navegue até a página LA Skateparks criada com o Modelo de página de artigo: http://localhost:4502/editor.html/content/wknd/us/en/magazine/guide-la-skateparks.html.
-
Clique no ícone Informações da página e, no menu, selecione Visualizar como publicada para abrir a página do artigo fora do editor do AEM.
-
Visualize a origem da página de http://localhost:4502/content/wknd/us/en/magazine/guide-la-skateparks.html?wcmmode=disabled, e você poderá ver as seguintes referências das clientlibs no
<head>:code language-html <head> ... <script src="/etc.clientlibs/wknd/clientlibs/clientlib-dependencies.lc-d41d8cd98f00b204e9800998ecf8427e-lc.min.js"></script> <link rel="stylesheet" href="/etc.clientlibs/wknd/clientlibs/clientlib-dependencies.lc-d41d8cd98f00b204e9800998ecf8427e-lc.min.css" type="text/css"> <link rel="stylesheet" href="/etc.clientlibs/wknd/clientlibs/clientlib-site.lc-78fb9cea4c3a2cc17edce2c2b32631e2-lc.min.css" type="text/css"> ... </head>Observe que as clientlibs estão usando o ponto de acesso de proxy
/etc.clientlibs. Você também verá que a seguinte clientlib inclui na parte inferior da página:code language-html ... <script src="/etc.clientlibs/wknd/clientlibs/clientlib-site.lc-7157cf8cb32ed66d50e4e49cdc50780a-lc.min.js"></script> <script src="/etc.clientlibs/wknd/clientlibs/clientlib-base.lc-53e6f96eb92561a1bdcc1cb196e9d9ca-lc.min.js"></script> ... </body>note note NOTE No AEM 6.5/6.4, as bibliotecas do lado do cliente não são minimizadas automaticamente. Consulte a documentação sobre o Gerenciador de bibliotecas de HTML para habilitar a minimização (recomendado). note warning WARNING É crucial, no lado da publicação, que as bibliotecas de clientes não sejam atendidas a partir de /aplicativos, pois esse caminho deve ser restrito por motivos de segurança, usando-se a seção de filtros do Dispatcher. A propriedade allowProxy da biblioteca do cliente garante que o CSS e o JS sejam atendidos a partir de /etc.clientlibs.
Próximas etapas next-steps
Saiba como implementar estilos individuais e reutilizar os componentes principais com o sistema de estilos do Experience Manager. O desenvolvimento com o sistema de estilos abrange o uso do sistema de estilos para estender os componentes principais com o CSS específico da marca e configurações de política avançadas do editor de modelos.
Veja o código concluído no GitHub ou revise e implante o código localmente na ramificação do Git tutorial/client-side-libraries-solution.
- Clone o repositório github.com/adobe/aem-wknd-guides.
- Confira a ramificação
tutorial/client-side-libraries-solution.
Ferramentas e recursos adicionais additional-resources
DevServer do webpack: marcação estática webpack-dev-static
Nos exercícios anteriores, vários arquivos Sass no módulo ui.frontend foram atualizados e, por meio de um processo de compilação, você pode ver que essas alterações foram refletidas no AEM. A seguir, vamos ver uma técnica que usa um webpack-dev-server para desenvolver rapidamente os estilos de front-end em relação ao HTML estático.
Essa técnica é útil quando a maioria dos estilos e códigos de front-end é executada por um desenvolvedor de front-end dedicado que pode não ter acesso fácil a um ambiente do AEM. Essa técnica também permite que o FED faça modificações diretamente no HTML, que podem ser entregues a um desenvolvedor do AEM para implementação como componentes.
-
Copie a origem da página do artigo “LA Skateparks” em http://localhost:4502/content/wknd/us/en/magazine/guide-la-skateparks.html?wcmmode=disabled.
-
Reabra o IDE. Cole a marcação copiada do AEM no
index.htmldo módulo ui.frontend, abaixo desrc/main/webpack/static. -
Edite a marcação copiada e remova todas as referências a clientlib-site e clientlib-dependencies:
code language-html <!-- remove --> <script type="text/javascript" src="/etc.clientlibs/wknd/clientlibs/clientlib-dependencies.js"></script> <link rel="stylesheet" href="/etc.clientlibs/wknd/clientlibs/clientlib-dependencies.css" type="text/css"> <link rel="stylesheet" href="/etc.clientlibs/wknd/clientlibs/clientlib-site.css" type="text/css"> ... <script type="text/javascript" src="/etc.clientlibs/wknd/clientlibs/clientlib-site.js"></script>Essas referências precisam ser removidas, pois o servidor de desenvolvimento do webpack gera esses artefatos automaticamente.
-
Inicie o servidor de desenvolvimento do webpack a partir de um novo terminal, executando o seguinte comando no módulo ui.frontend:
code language-shell $ cd ~/code/aem-guides-wknd/ui.frontend/ $ npm start > aem-maven-archetype@1.0.0 start code/aem-guides-wknd/ui.frontend > webpack-dev-server --open --config ./webpack.dev.js -
Isso deve abrir uma nova janela do navegador em http://localhost:8080/ com marcação estática.
-
Edite o arquivo
src/main/webpack/site/_variables.scss. Substitua a regra$text-colorpela seguinte:code language-diff - $text-color: $black; + $text-color: $pink;Salve as alterações.
-
Você verá as alterações refletidas automaticamente no navegador, em http://localhost:8080.
-
Revise o arquivo
/aem-guides-wknd.ui.frontend/webpack.dev.js. Ele contém a configuração do webpack usada para iniciar o webpack-dev-server. Ele atua como proxy dos caminhos/contente/etc.clientlibsde uma instância do AEM em execução localmente. É assim que as imagens e outras clientlibs (não gerenciadas pelo código ui.frontend) são disponibilizadas.note caution CAUTION A origem das imagens da marcação estática aponta para um componente de imagem ativo em uma instância do AEM local. As imagens aparecem quebradas quando o caminho para a imagem muda, quando o AEM não é iniciado ou quando o navegador não se conectou à instância local do AEM. Se estiver enviando a um recurso externo, também será possível substituir as imagens por referências estáticas. -
Você pode parar o servidor do webpack por meio da linha de comando, digitando
CTRL+C.
Depurar bibliotecas do lado do cliente debugging-clientlibs
Utilizando-se diferentes métodos de categorias e incorporações para incluir várias bibliotecas de clientes, pode ser complicado solucionar problemas. O AEM oferece várias ferramentas para ajudar com isso. Uma das ferramentas mais importantes é Recompilar bibliotecas de clientes, que força o AEM a recompilar qualquer arquivo MENOS e gerar o CSS.
-
Bibliotecas de despejo: lista as bibliotecas de clientes registradas na instância do AEM.
<host>/libs/granite/ui/content/dumplibs.html -
Saída de testes: permite que o usuário veja a saída em HTML esperada de clientlibs, inclusive com base na categoria.
<host>/libs/granite/ui/content/dumplibs.test.html -
Validação de dependências de bibliotecas: destaca todas as dependências ou categorias inseridas que não podem ser encontradas.
<host>/libs/granite/ui/content/dumplibs.validate.html -
Recompilar bibliotecas de clientes: permite que o usuário force o AEM a recompilar as bibliotecas de clientes ou invalidar o cache de bibliotecas de clientes. Essa ferramenta é eficaz para desenvolver com MENOS, pois isso pode forçar o AEM a recompilar o CSS gerado. Em geral, é mais eficaz invalidar caches e executar uma atualização da página que reconstruir as bibliotecas.
<host>/libs/granite/ui/content/dumplibs.rebuild.html