Compilar vários arquivos javascript / css em um único arquivo

Bem, esta situação não ocorre com tanta frequência, por isso levanta uma questão POR QUÊ?

Vou te dar um exemplo simples: eu estava desenvolvendo um aplicativo de desktop Qt HTML 5. O HTML 5 foi escolhido devido à sua flexibilidade e … bem … parecia divertido tentar isso. No entanto, cheguei à conclusão que quero ter a possibilidade de usar o aplicativo offline, então fui forçado a armazenar todo o código HTML 5 localmente. Isso me levou a alguns problemas:

  • O usuário é fornecido não apenas com binários, mas com um monte de pastas (html / js / css /).
  • Os usuários podem visualizar e modificar a maioria das lógicas do aplicativo. (Bem, não havia riscos de segurança, mas ainda …)

Em uma rápida visão, não consegui encontrar nada para resolver esses problemas, então escrevi um script Python muito simples que passa pela árvore de dependências e adiciona tudo a um único arquivo e o criptografa (usei uma criptografia base64 muito simples apenas para provar o ponto ) O próprio script pode ser encontrado aqui: https://gist.github.com/zaibacu/9412574 (espero uma versão mais atualizada)

import re
import codecs
import base64

def load_js(src):
stream
= ""
with codecs.open(src, encoding="utf-8", mode="r") as f:
stream
= f.read()

return "<script>" + stream + "</script>"

def load_css(src):
stream
= ""
with codecs.open(src, encoding="utf-8", mode="r") as f:
stream
= f.read()
return "<style>n"+ stream + "n</style>"

def dependency_walk(root_file):
with open(root_file) as f:
stream
= f.read()

#Handle scripts
while True:
scripts
= re.compile("(<script type="text/javascript"" src="")(?P<url>[a-z./]+)""></script>"")
result
= scripts.search(stream)
if not result:
break

stream
= stream.replace(result.group(0)