grunt-contrib-uglify icon indicating copy to clipboard operation
grunt-contrib-uglify copied to clipboard

Code is being sorted

Open mbrammer opened this issue 10 years ago • 8 comments

When I'm running uglifier, the code in the destination file is not arranged like in the source file.

Short Example Source

function one() {}
function two() {}
function three() {}

Destination

function one() {}
function three() {}
function two() {}

Real Example Source

/* jQuery */
/*! jQuery v2.1.0 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
[... jQuery JS library code ...]

/* jQuery UI*/
/*! jQuery UI - v1.11.2 - 2014-10-19
* http://jqueryui.com
* Includes: core.js, effect.js, effect-bounce.js
* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
[... jQuery UI JS library code ...]

/* jBox (notifications) */
[... jBox JS library code ...]

/* Bootstrap */
/*!
 * Bootstrap v3.2.0 (http://getbootstrap.com)
 * Copyright 2011-2014 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 */
[... Bootstrap JS library code ...]

Destination

/* jQuery */
/*! jQuery v2.1.0 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */

/* jBox (notifications) */
[... jBox JS library code ...]

[... Some function from random lines (eg. 1482) ...]
[... Some function from random lines (eg. 927) ...]
[... Some function from random lines (eg. 3438) ...]

/*!
 * Bootstrap v3.2.0 (http://getbootstrap.com)
 * Copyright 2011-2014 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 */
[... jQuery JS library code ...]

/*! jQuery UI - v1.11.2 - 2014-10-19
* http://jqueryui.com
* Includes: core.js, effect.js, effect-bounce.js
* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
[... jQuery UI JS library code ...]

My Config

uglify: {
    production: {
        options: {
            banner: '/*generated on <%= grunt.template.today("yyyy-mm-dd HH:MM:ss") %>*/\n',
            beautify: false,
            compress: {
                drop_console: true
            }
        },
        files: [{
            expand: true,
            cwd: 'js/.generated/public/',
            src: ['**/*.js'],
            dest: 'webroot/js'
        }]
    },

    development: {
        options: {
            beautify: true
        },
        files: [{
            expand: true,
            cwd: 'js/.generated/public/',
            src: ['**/*.js'],
            dest: 'webroot/js'
        }]
    }
},

Did I do something wrong or is it a bad bug?!

mbrammer avatar Nov 07 '14 11:11 mbrammer

This is likely an issue with Uglify, and not this task, which is just a wrapper. Have you tried running the source through the uglify command line? Does it also resort your code?

jamesplease avatar Nov 07 '14 12:11 jamesplease

Yes I have and no it doesn't sort the code. I used uglifyjs js/.generated/public/global.js -o webroot/js/global.js So the problem seems to be grunt-contrib-uglify.

mbrammer avatar Nov 07 '14 12:11 mbrammer

Which version are you comparing against? The development version? If so, try turning on the beautify flag to the CLI. More generally make sure that the options are the same when you're comparing.

jamesplease avatar Nov 07 '14 12:11 jamesplease

Oh sorry, forgot to mention that. No, the production is used. I have specially added beautify: false, but I didn't change anything. I just tried to turn on beautify and it's also sorted.

mbrammer avatar Nov 07 '14 12:11 mbrammer

Tried a more basic config and started grunt uglify:production

uglify: {
    production: {
        files: {
            'js/global.min.grunt.js': ['js/.generated/public/global.js']
        }
    }
}

Same problem. BTW: I'm using the latest version 0.6.0 of grunt-contrib-uglify

mbrammer avatar Nov 07 '14 12:11 mbrammer

@jmeas Can you reproduce this issue?

mbrammer avatar Nov 18 '14 07:11 mbrammer

+1, i'm experiencing this as well.

prod:
    options:
      banner:     "<%= banner %>"
      screwIE8:   true
      compress:   drop_console: true
    files: 
      "<%= dirs.build %>/js/app.js":"<%= app.js %>"

the array of app.js is not respected, breaking the production minified code. i havent tried uglify from the command line, but will try now.

argyleink avatar Nov 20 '15 22:11 argyleink

I also have this issue on grunt contrib uglify 2.3.0

uglify: {
            common: {
              options: {
                    mangle: true,
                    compress: {
                      drop_console: true, // <- removes console.log 
                      hoist_funs: false // 
                    }
                },
                files: {
                    "<%= paths.compiled %>/common.min.js": [
                        '<%= paths.vendor %>/jquery-ui/jquery-ui.min.js',
                        '<%= paths.vendor %>/jquery.countdown/jquery.countdown.min.js',
                        '<%= paths.vendor %>/bootstrap/bootstrap.min.js',
                        '<%= paths.vendor %>/jquery-media/jquery.viewportchecker.min.js',
                        '<%= paths.static %>/jquery-media/js/jquery.countTo.js',
                        '<%= paths.vendor %>/vue/vue.min.js',
                        '<%= paths.vendor %>/vue/vue-resource.min.js',
                        '<%= paths.vendor %>/vue/vue-infinite-loading.js',
                        '<%= paths.static %>/js/components/ajax-utils.js',
                        '<%= paths.static %>/js/global.js',
                        '<%= paths.static %>/js/components/selecttextevent.js',
                        '<%= paths.static %>/js/components/smart_select.js',
                        '<%= paths.static %>/js/components/utils.js',
                        '<%= paths.static %>/js/components/words.js',
                        '<%= paths.static %>/js/components/auth.js',
                        '<%= paths.static %>/js/sections/landing.js',
                        '<%= paths.static %>/js/sections/socials.js',
                        '<%= paths.static %>/js/sections/actions.js',
                        '<%= paths.static %>/js/sections/publications.js',
                        '<%= paths.static %>/js/sections/projects.js',
                        '<%= paths.static %>/js/sections/people.js',
                    ],
                },
            },
}

pythdasch avatar Apr 14 '17 15:04 pythdasch