Is there a way to tell django compressor to create source maps

I want to be able to debug minified compressed javascript code on my production site. Our site uses django compressor to create minified and compressed js files. I read recently about chrome being able to use source maps to help debug such javascript. However I don't know how/if possible to tell the django compressor to create source maps when compressing the js files


I don't have a good answer regarding outputting separate source map files, however I was able to get inline working.

Prior to adding source maps my settings.py file used the following precompilers

COMPRESS_PRECOMPILERS = (
    ('text/coffeescript', 'coffee --compile --stdio'),
    ('text/less', 'lessc {infile} {outfile}'),
    ('text/x-sass', 'sass {infile} {outfile}'),
    ('text/x-scss', 'sass --scss {infile} {outfile}'),
    ('text/stylus', 'stylus < {infile} > {outfile}'),
)

After a quick

$ lessc --help

You find out you can put the less and map files in to the output css file. So my new text/less precompiler entry looks like

('text/less', 'lessc --source-map-less-inline --source-map-map-inline {infile} {outfile}'),

Hope this helps.

Edit: Forgot to add, lessc >= 1.5.0 required for this, to upgrade use

$ [sudo] npm update -g less

While I couldn't get this to work with django-compressor (though it should be possible, I think I just had issues getting the app set up correctly), I was able to get it working with django-assets.

You'll need to add the appropriate command-line argument to the less filter source code as follows:

diff --git a/src/webassets/filter/less.py b/src/webassets/filter/less.py
index eb40658..a75f191 100644
--- a/src/webassets/filter/less.py
+++ b/src/webassets/filter/less.py
@@ -80,4 +80,4 @@ class Less(ExternalTool):
     def input(self, in_, out, source_path, **kw):
         # Set working directory to the source file so that includes are found
         with working_directory(filename=source_path):
-            self.subprocess([self.less or 'lessc', '-'], out, in_)
+            self.subprocess([self.less or 'lessc', '--line-numbers=mediaquery', '-'], out, in_)

Aside from that tiny addition:

  • make sure you've got the node -- not the ruby gem -- less compiler (>=1.3.2 IIRC) available in your path.

  • turn on the sass source-maps option buried away in chrome's web inspector config pages. (yes, 'sass' not less: less tweaked their debug-info format to match sass's since since sass had already implemented a chrome-compatible mapping and their formats weren't that different to begin with anyway...)


  • 不是开箱即用,但您可以扩展自定义过滤器:

    from compressor.filters import CompilerFilter
    
    class UglifyJSFilter(CompilerFilter):
            command = "uglifyjs -c -m " /
                "--source-map-root={relroot}/ " /
                "--source-map-url={name}.map.js" /
                "--source-map={relpath}/{name}.map.js -o {output}"
    
    链接地址: http://www.djcxy.com/p/11750.html

    上一篇: 如何获得特定的github通知,如拉请求或分配的问题?

    下一篇: 有没有办法告诉Django压缩机创建源地图