Search code examples
javascriptnode.jsminifyuglifyjsgulp-uglify

Prevent function name to get mangled while minification


I'm using gulp-uglify ~1.5.4 for my javascript minification, in a file a have this code : columns[j].colDef.cellRenderer.name === 'dateRenderer', cellRenderer is a function so cellRenderer.name will return he name of that function. So when the function is dateRenderer() that code should return true which doesn't happens since after the minification the function got mangled.

I found this thread : Make gulp-uglify not mangle only one variable but I don't want to tell uglify what variables to mangle and not, isn't there any other way to solve this ? like in AngularJS we are using the $inject service.


Solution

  • If you don't want to specify to uglifyjs what function names should it skip from mangling, store that function's name as a string.

    function dateRenderer() {
      // do something useful
    }
    
    dateRenderer.rendererName = 'dateRenderer'
    
    // later ...
    var fn = dateRenderer
    
    if (fn.rendererName === 'dateRenderer') {
      console.log('ok!')
    }

    ...or set its name after you called that specific function:

    function dateRenderer() {
      dateRenderer.rendererName = 'dateRenderer'
      
      // do something useful
    }
    
    // later ...
    var fn = dateRenderer
    
    // do something
    dateRenderer()
    
    if (fn.rendererName === 'dateRenderer') {
      console.log('ok!')
    }