Ao rastrear erros de JavaScript (JS) no frontend, um stack trace localiza a falha. O Real User Monitoring (RUM) coleta esses stack traces de erros JS e os analisa com arquivos de source map enviados previamente. Como o RUM gerencia múltiplas versões de arquivos de source map, associar com precisão um arquivo JS presente no stack trace de uma exceção ao seu arquivo de source map correspondente apenas pelo nome costuma ser difícil. Com o plugin de ferramenta de build do RUM, você injeta um UUID nos arquivos JS empacotados e nos arquivos de source map para estabelecer um vínculo bidirecional. Assim, o RUM analisa e exibe automaticamente o stack trace ao abrir a página de detalhes da exceção, sem necessidade de selecionar manualmente um arquivo de source map.
Pré-requisitos
Antes de usar o plugin, conclua as preparações a seguir:
Crie um workspace e um aplicativo RUM Web ou H5 no Cloud Monitor 2.0 e obtenha o
workspacee oserviceId. Para obter instruções, consulte Integrate a web or H5 application.Use Node.js 20 LTS ou Node.js 22 e superior no ambiente de build.
-
Obtenha um AccessKey ID e um AccessKey secret. A conta precisa ter permissões do CMS. Veja abaixo um exemplo de política de permissão mínima:
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "cms:GetRumSymbolFileParams", "Resource": "*" } ] }
Use o plugin de ferramenta de build do RUM
Webpack
-
Instale o pacote npm do plugin de ferramenta de build do RUM para Webpack.
npm install -D @arms/rum-webpack-plugin -
Integre e configure o plugin do Webpack.
Em builds de produção, use
hidden-source-mappara evitar expor a URL do source map na saída JavaScript.const { rumWebpackPlugin } = require('@arms/rum-webpack-plugin'); module.exports = { mode: 'production', devtool: 'hidden-source-map', plugins: [ rumWebpackPlugin({ workspace: 'your-workspace', serviceId: 'your-rum-service-id', version: 'your-release-version', region: 'cn-hangzhou', accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID, accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET, stsToken: process.env.ALIBABA_CLOUD_SECURITY_TOKEN, clearSourceMap: true, }), ], };O Webpack ignora o processamento e o upload do source map quando
mode === 'development'ouNODE_ENV === 'development'. Use um build diferente de desenvolvimento para enviar os source maps de produção.
Vite
-
Instale o pacote npm do plugin de ferramenta de build do RUM para Vite.
npm install -D @arms/rum-vite-plugin -
Integre e configure o plugin do Vite.
import { defineConfig } from 'vite'; import { rumVitePlugin } from '@arms/rum-vite-plugin'; export default defineConfig({ build: { sourcemap: true, }, plugins: [ rumVitePlugin({ workspace: 'your-workspace', serviceId: 'your-rum-service-id', version: 'your-release-version', region: 'cn-hangzhou', accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID, accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET, stsToken: process.env.ALIBABA_CLOUD_SECURITY_TOKEN, clearSourceMap: true, }), ], });Defina o parâmetro
build.sourcemapcomotrueou'hidden'. Não use'inline'.
Referência de configuração
|
Campo |
Obrigatório para upload automático |
Padrão |
Descrição |
|
|
Sim |
Nenhum |
Nome do workspace do Cloud Monitor 2.0. |
|
|
Sim |
Nenhum |
Service ID do aplicativo RUM. |
|
|
Sim |
Sem padrão |
Versão de lançamento do aplicativo. Isola source maps entre diferentes builds. Use sua versão de lançamento real ou número de build. |
|
|
Sim |
Sem padrão |
Região do serviço RUM. |
|
|
Sim |
Nenhum |
AccessKey ID para chamar a OpenAPI de política de upload. |
|
|
Sim |
Nenhum |
AccessKey secret para chamar a OpenAPI de política de upload. |
|
|
Não |
Nenhum |
Token do Security Token Service (STS) transmitido ao usar credenciais temporárias STS. |
|
|
Não |
|
Exclui os arquivos locais |
Verifique a injeção
Verifique os arquivos de source map
Se clearSourceMap: false, abra um arquivo .map no diretório de saída do build. Um debugId formatado corretamente no nível superior indica injeção bem-sucedida. Exemplo:
{
"version": 3,
"file": "index.js",
"sources": ["webpack://app/src/index.ts"],
"sourcesContent": ["throw new Error('test');"],
"mappings": "AAAA",
"debugId": "e4f083d6-b8d8-4cae-a0ea-16f2e83a6be1"
}
O campo sourcesContent deve estar presente e preenchido. Se estiver ausente ou vazio, o RUM poderá restaurar apenas a localização do arquivo, sem exibir o contexto do código-fonte.
Verifique o runtime do navegador
Abra a página implantada e execute o seguinte comando no console do navegador:
window._armsRumDebugIds;
Se o objeto retornado contiver mapeamentos de UUID, os arquivos JavaScript da página atual registraram um debugId. O plugin também registra o debugId em globalThis, self, global, document.defaultView e janelas pai/top acessíveis para oferecer suporte a cenários de iframe e micro-frontends.
Verifique os resultados do upload
Na página File Management do aplicativo RUM, confirme se:
Os arquivos de source map aparecem na lista.
A versão do arquivo corresponde à
versionconfigurada no plugin.O UUID corresponde ao
debugIdna saída do build.
Perguntas frequentes
Os logs de build relatam que os arquivos de source map não foram encontrados
Verifique se a ferramenta de build gera arquivos .map separados. Evite source maps inline ou eval. Confirme também se scripts de pós-processamento não modificaram os nomes e caminhos dos arquivos JavaScript e .map.
O upload foi bem-sucedido, mas a página de detalhes da exceção não exibe o código-fonte
Verifique os itens a seguir nesta ordem:
O arquivo
.mapcontém umsourcesContentnão vazio?O
debugIdno source map corresponde ao UUID reportado no stack trace da exceção?Os valores de
workspace,serviceId,versioneregioncorrespondem ao aplicativo RUM de destino?O arquivo enviado aparece na página File Management do aplicativo de destino?
O Webpack não envia arquivos
Confirme se nem mode nem NODE_ENV estão definidos como development. Verifique também se o build gera arquivos externos de source map.
Posso usar um bucket OSS personalizado?
Não. A OpenAPI retorna o endpoint de upload e os parâmetros de formulário. O plugin não expõe configurações de bucket.
Como impedir a implantação dos source maps na internet pública?
No Webpack, use hidden-source-map. Defina também clearSourceMap: true. O plugin exclui o arquivo local .map correspondente após cada upload bem-sucedido.
Erro indica que a versão atual do Node.js não suporta determinados recursos
Atualize o ambiente de build para Node.js 20 LTS ou Node.js 22 e superior. As dependências do plugin Vite não suportam Node.js 18 ou 21.
Um arquivo de source map excede o limite de tamanho
Um único arquivo de source map não pode exceder 50 MiB. Reduza o tamanho do arquivo com code splitting, diminuição do conteúdo de source inline ou ajuste da configuração de build. Mantenha sourcesContent suficiente para exibir o contexto do código-fonte.
Notas de versão
Recomendamos que novos usuários ou aqueles em processo de atualização usem a versão mais recente 1.1.0. A versão 0.0.x usa o pipeline de upload legado e não é mais recomendada.
|
Versão |
Status |
Descrição |
|
|
Atualmente recomendada |
Exige passagem explícita de um objeto de configuração do plugin. |
|
|
Atualização recomendada |
Alterou o pipeline de upload para a API |
|
|
Não recomendada |
Usa o pipeline de upload legado. Estendeu o escopo de registro do |
|
|
Não recomendada |
Usa o pipeline de upload legado. Adicionou seleção de região e suporte a token STS. |
|
|
Não recomendada |
Usa o pipeline de upload legado. Adicionou upload automático de source map após o build do projeto. |
|
|
Não recomendada |
Usa o pipeline de upload legado. Adicionou suporte a Webpack e Vite. Injeta um UUID para criar um vínculo bidirecional entre arquivos JavaScript e seus arquivos de source map correspondentes. |
Ao atualizar da versão 0.0.x para a 1.1.0:
Passe explicitamente um objeto de configuração para o plugin Webpack ou Vite e configure todos os campos obrigatórios.
Se a configuração existente usar
pid, substitua-o porserviceId.Configure explicitamente
versioneregion. O plugin não fornece mais valores padrão.Após a atualização da versão
0.0.x, o sistema usará o pipeline de upload da OpenAPI do CMS. Configureworkspace,serviceIde a autenticação AccessKey conforme descrito neste documento.