Opened 5 years ago
Last modified 5 years ago
#32383 closed New feature
ManifestStaticFilesStorage doesn't update JavaScript source map references — at Initial Version
| Reported by: | Adam Johnson | Owned by: | nobody | 
|---|---|---|---|
| Component: | contrib.staticfiles | Version: | dev | 
| Severity: | Normal | Keywords: | |
| Cc: | Triage Stage: | Ready for checkin | |
| Has patch: | yes | Needs documentation: | no | 
| Needs tests: | no | Patch needs improvement: | no | 
| Easy pickings: | no | UI/UX: | no | 
Description
ManifestStaticFilesStorage replaces URL's in CSS files with the hashed equivalents, but doesn't have any other out-of-the-box rules. One common use case for cross-static-file-references is a JavaScript source map, a structured comment in a JS file.
I think it would be a reasonable inclusion that Django modifies these too. I got it working (with Whitenoise's subclass of ManifestStaticFilesStorage) with this extra regex pattern:
from whitenoise.storage import CompressedManifestStaticFilesStorage
class SuperStaticFilesStorage(CompressedManifestStaticFilesStorage):
    patterns = CompressedManifestStaticFilesStorage.patterns + (
        (
            "*.js",
            (
                (
                    r"(//# sourceMappingURL=(.*?\.js\.map))$",
                    "//# sourceMappingURL=%s",
                ),
            ),
        ),
    )
Ideally the regex would start with a ", which requires the regex mulitline flag, and would NOT be compiled in case-insenstive mode. The current storage implementation forces compiling regexes with only the case insensitive flag.