Übergeordnete Sammlungstatik- und ManifestierdateispeicherungPython

Python-Programme
Anonymous
 Übergeordnete Sammlungstatik- und Manifestierdateispeicherung

Post by Anonymous »

Ich versuche, die Minifikation von Terser JS in einen Django CollectStatic -Befehl zu integrieren, indem ich das komprimierte ManifestaticFileStorage von Whitenoise in den folgenden Code überschreibt, aber die DEF _SAVE () -Methode mindert die kopierte Dateien, aber die Hashed -Dateien werden entweder als ursprünglich als ursprünglicher oder leeres Verhältnis von Inhalten geleitet. Wie kann ich dies umgehen, damit sowohl die Originaldateien als auch die Hashed -Dateien mit Terser minimiert werden. < /P>

Code: Select all

class MinifiedCompressedManifestStaticFilesStorage(CompressedManifestStaticFilesStorage):
def minify_js(self, content_str):
"""Minify JavaScript using Terser and validate output."""
terser_path = (
os.path.abspath("./node_modules/.bin/terser.cmd")
if os.name == "nt"
else "./node_modules/.bin/terser"
)
try:
command = f'"{terser_path}" -m -c' if os.name == "nt" else [terser_path, "-m", "-c"]
# Explicitly specify Terser CLI path if installed locally
result = subprocess.run(
command,
input=content_str.encode("utf-8"),
capture_output=True,
check=True,
)
minified = result.stdout
if not minified:
raise ValueError("Terser returned empty output")
return minified
except (subprocess.CalledProcessError, FileNotFoundError, ValueError) as e:
print(f"Minification failed: {str(e)}. Using original content.")
return content_str.encode("utf-8")  # Fallback to original

def _save(self, name, content):
if name.endswith(".js"):
# Read and close original content
content_str = content.read().decode("utf-8")
content.close()

# Minify and create new ContentFile
minified_bytes = self.minify_js(content_str)
content = ContentFile(minified_bytes, name=name)
content.seek(0)  # Reset pointer for parent class

return super()._save(name, content)

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post