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 as ui.frontend um módulo dissociado webpack projeto, podem ser integrados ao processo de build completo.
Pré-requisitos prerequisites
Analisar as ferramentas e instruções necessárias para a configuração de um ambiente de desenvolvimento local.
É também recomendável rever a Noções básicas sobre componentes tutorial para entender os fundamentos das bibliotecas do lado do cliente e do AEM.
Projeto inicial
Verifique o código de linha base no qual o tutorial se baseia:
-
Confira o
tutorial/client-side-libraries-start
ramificar de GitHubcode language-shell $ cd aem-guides-wknd $ git checkout tutorial/client-side-libraries-start
-
Implante a base de código em uma instância de AEM local usando suas habilidades de Maven:
code language-shell $ mvn clean install -PautoInstallSinglePackage
note note NOTE Se estiver usando o AEM 6.5 ou 6.4, anexe o classic
para qualquer comando Maven.code language-shell $ mvn clean install -PautoInstallSinglePackage -Pclassic
Você sempre pode exibir o código concluído em GitHub ou confira o código localmente alternando para a ramificação tutorial/client-side-libraries-solution
.
Objetivos
- Entenda como as bibliotecas do lado do cliente são incluídas em uma página por meio de um modelo editável.
- Saiba como usar o
ui.frontend
e um servidor de desenvolvimento de webpack para desenvolvimento front-end dedicado. - Entenda o fluxo de trabalho completo de entrega de CSS e JavaScript compilados para uma implementação do Sites.
O que você vai criar what-build
Neste capítulo, você adiciona alguns estilos de linha de base para o site da WKND e o Modelo de página de artigo para aproximar a implementação da Modelos de design da interface do usuário. Você usa um fluxo de trabalho avançado de front-end para integrar um projeto de webpack em uma biblioteca de cliente AEM.
Página de artigo com estilos de linha de base aplicados
Segundo plano 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 bibliotecas do lado do cliente ou clientlibs são:
- Armazene CSS/JS em arquivos pequenos separados para facilitar o desenvolvimento e a manutenção
- Gerenciar dependências em estruturas de terceiros de maneira organizada
- Minimize o número de solicitações do lado do cliente concatenando CSS/JS em uma ou duas solicitações.
Mais informações sobre como usar o As bibliotecas do lado do cliente podem ser encontradas aqui.
As bibliotecas do lado do cliente têm algumas limitações. Mais notavelmente, é um suporte limitado para linguagens de front-end populares como Sass, LESS e TypeScript. No tutorial, vamos examinar como a variável ui.frontend pode ajudar a resolver isso.
Implante a base de código inicial em uma instância de AEM local e navegue até http://localhost:4502/editor.html/content/wknd/us/en/magazine/guide-la-skateparks.html. Esta página não tem estilo. Vamos implementar bibliotecas do lado do cliente para a marca WKND para adicionar CSS e JavaScript à página.
Organização de bibliotecas do lado do cliente organization
A seguir, vamos explorar a organização das bibliotecas de clientes geradas pelo Arquétipo de projeto AEM.
Organização da biblioteca do lado do cliente e inclusão da página no diagrama de alto nível
-
Usando o VSCode ou outro IDE, abra o ui.apps módulo.
-
Expanda o caminho
/apps/wknd/clientlibs
para exibir as clientlibs geradas pelo arquétipo.Na seção abaixo, essas clientlibs são analisadas com mais detalhes.
-
A tabela a seguir resume as bibliotecas de clientes. Mais detalhes sobre incluindo as Bibliotecas de clientes podem ser encontradas aqui.
table 0-row-3 1-row-3 2-row-3 3-row-3 4-row-3 Nome Descrição Notas clientlib-base
Nível base de CSS e JavaScript necessários para o funcionamento do Site WKND incorpora bibliotecas de cliente dos Componentes principais clientlib-grid
Gera o CSS necessário para Modo de layout para trabalhar. Os pontos de interrupção de dispositivo móvel/tablet podem ser configurados aqui clientlib-site
Contém um tema específico do site para o site WKND Gerado pelo ui.frontend
móduloclientlib-dependencies
Incorpora qualquer dependência de terceiros Gerado pelo ui.frontend
módulo -
Observe que
clientlib-site
eclientlib-dependencies
são ignorados do controle de origem. Isso ocorre por design, já que são gerados no momento da criação peloui.frontend
módulo.
Atualizar estilos base base-styles
Em seguida, atualize os estilos básicos definidos no ui.frontend módulo. Os arquivos no ui.frontend
o módulo gera o clientlib-site
e clientlib-dependecies
Bibliotecas que contêm o tema do site e qualquer dependência de terceiros.
As bibliotecas do lado do cliente não são compatíveis com idiomas mais avançados, como Sass ou TypeScript. Há várias ferramentas de código aberto, como NPM e webpack que aceleram e otimizam o desenvolvimento de front-end. A meta do ui.frontend O módulo é capaz de usar essas ferramentas para gerenciar a maioria dos arquivos de origem front-end.
-
Abra o ui.frontend módulo e navegue até
src/main/webpack/site
. -
Abra o arquivo
main.scss
main.scss
é o ponto de entrada para os arquivos Sass naui.frontend
módulo. Inclui a_variables.scss
arquivo, que contém uma série de variáveis de marca a serem usadas em diferentes arquivos Sass no projeto. A variável_base.scss
O arquivo també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
. -
Inspect o arquivo
main.ts
. Incluimain.scss
e uma expressão regular para coletar qualquer.js
ou.ts
arquivos no projeto. Este ponto de entrada é usado pelo arquivos de configuração do webpack como ponto de entrada para todo oui.frontend
módulo. -
Inspect os arquivos abaixo de
src/main/webpack/site/styles
:Esses arquivos definem estilos para elementos globais no modelo, como o Cabeçalho, Rodapé e o contêiner de conteúdo principal. As regras CSS nesses arquivos se destinam a diferentes elementos de HTML
header
,main
, efooter
. Esses elementos de HTML foram definidos por políticas no capítulo anterior Páginas e modelos. -
Expanda a
components
pasta emsrc/main/webpack
e inspecione os arquivos.Cada arquivo mapeia para um Componente principal como o Componente Acordeão. Cada Componente principal é criado com Modificador do elemento do bloco ou notação BEM para facilitar o direcionamento a classes CSS específicas com regras de estilo. Os arquivos abaixo de
/components
foram compactados pelo Arquétipo de projeto AEM com as diferentes regras BEM para cada componente. -
Baixar os estilos base WKND wknd-base-estilos-src-v3.zip e descompactar o arquivo.
Para acelerar o tutorial, vários arquivos Sass que implementam a marca WKND com base nos Componentes principais e na estrutura do Modelo de página do artigo são fornecidos.
-
Substituir o conteúdo de
ui.frontend/src
com arquivos da etapa anterior. O conteúdo do zip deve substituir as seguintes pastas:code language-plain /src/main/webpack /components /resources /site /static
Inspect os arquivos alterados para ver detalhes da implementação do estilo WKND.
Integração do Inspect ao ui.frontend ui-frontend-integration
Uma peça chave de integração incorporada no ui.frontend módulo, aem-clientlib-generator A pega os artefatos CSS e JS compilados de um projeto webpack/npm e os transforma em bibliotecas AEM do lado do cliente.
O Arquétipo de projeto AEM configura automaticamente essa integração. Em seguida, descubra como funciona.
-
Abra um terminal de linha de comando e instale o ui.frontend módulo usando o
npm install
comando:code language-shell $ cd ~/code/aem-guides-wknd/ui.frontend $ npm install
note note NOTE npm install
a execução é necessária apenas uma vez, como após um novo clone ou geração do projeto. -
Iniciar o servidor de desenvolvimento do webpack em assistir executando o seguinte comando:
code language-shell $ npm run watch
-
Isso compila os arquivos de origem a partir do
ui.frontend
e 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 watch
preenche o clientlib-site e clientlib-dependencies no ui.apps que é sincronizado automaticamente com o AEM.note note NOTE Existe também uma npm run prod
perfil que minifica 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 O módulo ui.frontend pode ser encontrado aqui. -
Inspect o arquivo
site.css
debaixoui.frontend/dist/clientlib-site/site.css
. Este é o CSS compilado com base nos arquivos de origem Sass. -
Inspect o arquivo
ui.frontend/clientlib.config.js
. Este é o arquivo de configuração para um plug-in npm, aem-clientlib-generator que transforma o conteúdo de/dist
em uma biblioteca do cliente e a move para aui.apps
módulo. -
Inspect o arquivo
site.css
no ui.apps módulo emui.apps/src/main/content/jcr_root/apps/wknd/clientlibs/clientlib-site/css/site.css
. Esta deve ser uma cópia idêntica dosite.css
arquivo do ui.frontend módulo. Agora que está em ui.apps pode ser implantado no AEM.note note NOTE Desde clientlib-site é compilado durante o tempo de compilação, usando npm ou maven, ele pode ser ignorado com segurança do controle do código-fonte no ui.apps módulo. INSPECT o .gitignore
arquivo abaixo 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ê deve ver os estilos atualizados do artigo. Talvez seja necessário fazer uma atualização permanente para limpar todos os arquivos CSS armazenados em cache pelo navegador.
Está começando a parecer muito mais perto dos modelos!
note note NOTE As etapas executadas acima para criar e implantar o código ui.frontend no AEM são executadas automaticamente quando uma criação 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 ui.frontend
módulo para ver a npm run watch
implante automaticamente os estilos na instância AEM local.
-
De, o
ui.frontend
módulo abra o arquivo:ui.frontend/src/main/webpack/site/_variables.scss
. -
Atualize o
$brand-primary
variável de cor:code language-scsss //== variables.css //== Brand Colors $brand-primary: $pink;
Salve as alterações.
-
Retorne ao navegador e atualize a página AEM para ver as atualizações:
-
Reverter a alteração para o
$brand-primary
colorir e parar a criaçã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 da Web é incluir o CSS no cabeçalho do HTML <head>
e JavaScript logo antes de fechar </body>
tag.
-
Navegue até o modelo Página de artigo em http://localhost:4502/editor.html/conf/wknd/settings/wcm/templates/article-page/structure.html
-
Clique em Informações da página e, no menu, selecione Política da página para abrir o Política da página diálogo.
Informações da página > Política da página
-
Observe que as categorias para
wknd.dependencies
ewknd.site
estão listados 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 final do corpo. Você pode listar explicitamente o JavaScript clientlib que deve ser carregado no cabeçalho da página. Este é o caso parawknd.dependencies
.note note NOTE É igualmente possível fazer referência à wknd.site
ouwknd.dependencies
do componente de página diretamente, usando ocustomheaderlibs.html
oucustomfooterlibs.html
script. Usar o modelo oferece flexibilidade para que você possa escolher quais clientlibs serão usadas por modelo. Por exemplo, se você tiver uma biblioteca JavaScript pesada que só será usada em um template selecionado. -
Navegue até a Los Angeles Skateparks página criada usando o Modelo da página de artigo: http://localhost:4502/editor.html/content/wknd/us/en/magazine/guide-la-skateparks.html.
-
Clique em Informações da página e, no menu, selecione Exibir como publicado para abrir a página do artigo fora do Editor de AEM.
-
Visualizar a fonte 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 de clientlib 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 clientlibs estão usando o proxy
/etc.clientlibs
terminal. Você também deve 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 Para o AEM 6.5/6.4, as bibliotecas do lado do cliente não são minificadas automaticamente. Consulte a documentação no Gerenciador de biblioteca HTML para ativar minificação (recomendado). note warning WARNING No lado da publicação, é essencial que as bibliotecas do cliente sejam não servido por /apps pois esse caminho deve ser restrito por motivos de segurança usando o Seção de filtro do Dispatcher. A variável propriedade allowProxy da biblioteca do cliente garante que o CSS e o JS sejam atendidos no /etc.clientlibs.
Próximas etapas next-steps
Saiba como implementar estilos individuais e reutilizar os Componentes principais usando o Sistema de estilos do Experience Manager. Desenvolvimento com o sistema de estilo A abrange o uso do Sistema de estilos para estender os Componentes principais com CSS específico da marca e configurações de política avançadas do Editor de modelos.
Exibir o código concluído em GitHub ou revise e implante o código localmente em na ramificação Git tutorial/client-side-libraries-solution
.
- Clonar o github.com/adobe/aem-wknd-guides repositório.
- Confira o
tutorial/client-side-libraries-solution
filial.
Ferramentas e recursos adicionais additional-resources
DevServer do Webpack - Marcação Estática webpack-dev-static
Nos dois exercícios anteriores, vários arquivos Sass no ui.frontend Os módulos do foram atualizados e, por meio de um processo de criação, vemos que essas alterações foram refletidas no AEM. Em seguida, vamos analisar uma técnica que usa um webpack-dev-server para desenvolver rapidamente os estilos de front-end em relação estático HTML.
Essa técnica é útil se a maioria dos estilos e códigos de front-end for executada por um desenvolvedor de front-end dedicado que pode não ter acesso fácil a um ambiente AEM. Essa técnica também permite que o FED faça modificações diretamente no HTML, que podem então ser entregues a um desenvolvedor de AEM para serem implementados como componentes.
-
Copie a origem da página de artigo LA skatepark 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 na
index.html
no ui.frontend módulo abaixosrc/main/webpack/static
. -
Editar a marcação copiada e remover qualquer referência 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>
Remova essas referências porque 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 ui.frontend módulo:
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.
-
Editar o arquivo
src/main/webpack/site/_variables.scss
arquivo. Substitua o$text-color
regra com o seguinte:code language-diff - $text-color: $black; + $text-color: $pink;
Salve as alterações.
-
Você deve ver as alterações automaticamente refletidas no navegador em http://localhost:8080.
-
Revise o
/aem-guides-wknd.ui.frontend/webpack.dev.js
arquivo. Contém a configuração de webpack usada para iniciar o webpack-dev-server. Ela faz proxy dos caminhos/content
e/etc.clientlibs
de uma instância de AEM em execução local. É assim que as imagens e outras bibliotecas de clientes (não gerenciadas pelo ui.frontend (código de segurança).note caution CAUTION A origem de imagem da marcação estática aponta para um componente de imagem ativa em uma ocorrência de AEM local. As imagens aparecem quebradas se o caminho para a imagem mudar, se o AEM não for iniciado ou se o navegador não tiver se conectado à instância AEM local. Se estiver enviando para um recurso externo, também é possível substituir as imagens por referências estáticas. -
Você pode stop o servidor do webpack na linha de comando digitando
CTRL+C
.
aemfed develop-aemfed
aemfed O é uma ferramenta de linha de comando de código aberto que pode ser usada para acelerar o desenvolvimento de front-end. Ele é alimentado por aemsync, Browsersync, e Sling Log Tracer.
A um nível elevado, a aemfed
O foi projetado para acompanhar as alterações de arquivos na ui.apps e os sincroniza automaticamente diretamente com uma instância AEM em execução. Com base nas alterações, um navegador local é atualizado automaticamente, acelerando o desenvolvimento de front-end. Ele também foi criado para funcionar com o rastreador de log do Sling para exibir automaticamente todos os erros do lado do servidor diretamente no terminal.
Se você estiver trabalhando muito dentro do ui.apps , modificando scripts HTL e criando componentes personalizados, aemfed pode ser uma ferramenta poderosa para usar. A documentação completa pode ser encontrada aqui.
Depuração de bibliotecas do lado do cliente debugging-clientlibs
Utilização de diferentes métodos de categorias e incorpora para incluir várias bibliotecas de clientes, pode ser complicado solucionar problemas. O AEM expõe várias ferramentas para ajudar nisso. Uma das ferramentas mais importantes é Reconstruir 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 AEM.
<host>/libs/granite/ui/content/dumplibs.html
-
Testar saída - permite que um usuário veja a saída de HTML esperada de clientlib includes 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 incorporadas que não podem ser encontradas.
<host>/libs/granite/ui/content/dumplibs.validate.html
-
Reconstruir bibliotecas de clientes - permite que um usuário force o AEM a reconstruir as bibliotecas de clientes ou invalidar o cache das bibliotecas de clientes. Essa ferramenta é eficaz ao 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 de página do que reconstruir as bibliotecas.
<host>/libs/granite/ui/content/dumplibs.rebuild.html