Os mapas de origem são uma ferramenta muito boa para depurar algo em código compactado usando as ferramentas de desenvolvimento do Chrome. Existem muitas ferramentas que os geram, incluindo o fechamento do Google que já é suportado pelo django-compressor.
Aqui estão algumas informações: https://github.com/ryanseddon/source-map/wiki/Source-maps%3A-languages , -tools-and-other-info
Estou disposto a implementá-lo, mas gostaria de saber se há algum interesse neste recurso.
Até agora, li o código para ter uma ideia do que é necessário para fazer isso.
Primeiro, no lado das tags de modelo, existem pelo menos duas opções para ativar os mapas de origem, um parâmetro para o compressor ou um compressor diferente: {% compress js sourcemap %}
ou {% compress js-sourcemaps %}
Então, se a opção de mapas de origem estiver ativada, o compressor deve verificar se todos os pedaços são arquivos porque você não pode gerar mapas de origem para inline (eu acho, não completamente certo).
Finalmente, talvez a parte mais complicada, é necessário um backend de compactador que pode lidar com uma lista de arquivos e produzir o js compactado e o arquivo de mapa de origem.
Adoraria receber feedback sobre isso para saber se estou no caminho certo ou se entendi tudo errado.
Isso pode ser possível com o conjunto de ferramentas existente. Consegui suporte básico de sourceMapURL para CSS via SASS.
por exemplo, https://gist.github.com/Nagyman/6542739
Isso é muito preliminar; algumas limitações conhecidas são mencionadas nos comentários.
Estou interessado. Seria um código de teste de depuração fácil e rápido.
Algum avanço neste recurso?
Sim, estou trabalhando neste recurso.
@sicarrots Estou usando mapas de origem quando settings.DEBUG
pois o compressor apenas passa pelas tags originais, mas parece muito complicado fazê-las funcionar após a concatenação e realocação. Como você está abordando isso?
Estou tendo algum sucesso experimentando com Compressor e uglify.js. Por enquanto, criei uma subclasse de JsCompressor
e substituí output
para contornar toda a cadeia de filtro / concat / filtro e só uso Uglify para todas as atividades (concat, compactar, gerar mapas de origem).
mapas de origem também são usados pelo sentry https://www.getsentry.com/docs/sourcemaps/
@fetzig Exatamente meu raciocínio por trás disso
@Kos Você poderia gentilmente colar algum código para fins de inspiração? Obrigado B)
Isso é o que acabei usando: https://gist.github.com/Kos/9270494 (eu tenho compactação offline em produção e nenhuma compactação em desenvolvimento)
O próximo passo seria permitir o uso de {% compress js %}
para o JsCompressor
normal (porque a cadeia de filtro / concat / filtro às vezes é útil) e configurar algo como {% compress uglify %}
para usar meu classe personalizada, mas não descobri uma maneira de fazer isso pela configuração.
editar:: cervejas: :-)
: cervejas: @Kos!
1 para esse recurso!
Para mapas de origem JS, descobri que:
http://roverdotcom.github.io/blog/2014/05/28/javascript-error-reporting-with-source-maps-in-django/
com o plugin django-compressor correspondente
https://github.com/roverdotcom/django-compressor-sourcemaps/
1 Eu também gostaria deste recurso. É muito útil poder depurar arquivos compactados JS em produção. Erros de sentinela não fazem muito sentido se não.
+1 para o recurso, absolutamente necessário para erros de Sentry :)
+1 para mapas de origem js e css
Eu gostaria de ver o mapa de origem js / ES6 / coffee (até mesmo TypeScript) e css / sass / less
🍻
O Compress ainda não oferece suporte ao recurso de mapas de origem?
Não, ainda não oferece suporte a esse recurso. Você é bem-vindo para enviar um PR implementando isso.
Ainda é possível implementar alguma solução "hackeada", por exemplo:
https://bitbucket.org/imposeren/tabletop-planning/src/7d551806cfee2c5493b7273e40c5448aec480544/tabletop_tools/compressor_filters.py?at=master
É necessária uma solução melhor para fazer PR ...
Comentários muito úteis
mapas de origem também são usados pelo sentry https://www.getsentry.com/docs/sourcemaps/