防止函数名称在缩小时被弄乱

时间:2018-06-22 09:26:50

标签: javascript node.js minify uglifyjs gulp-uglify

我正在使用gulp-uglify〜1.5.4进行JavaScript压缩,在文件中有以下代码:columns[j].colDef.cellRenderer.name === 'dateRenderer'cellRenderer是一个函数,因此cellRenderer.name将返回他该函数的名称。 因此,当函数为dateRenderer()时,该代码应返回true,这不会发生,因为在缩小之后该函数被弄乱了。

我发现了这个线程:Make gulp-uglify not mangle only one variable,但我不想告诉uglify要处理哪些变量,而不是,没有其他方法可以解决这个问题吗?就像在AngularJS中一样,我们正在使用$ inject服务。

1 个答案:

答案 0 :(得分:2)

如果您不想指定给uglifyjs改掉哪些函数名,请将该函数名存储为字符串

function dateRenderer() {
  dateRenderer.rendererName = 'dateRenderer'
  
  // do something useful
}

// later ...
var fn = dateRenderer

// do something
dateRenderer()

if (fn.rendererName === 'dateRenderer') {
  console.log('ok!')
}

...或在调用该特定函数后设置其名称:

   <nav class="uk-navbar uk-navbar-container uk-margin">
    <div class="uk-navbar-left">

        <a class="uk-navbar-item uk-logo" href="#">Logo</a>

        <ul class="uk-navbar-nav">
            <li class="uk-active"><a href="#">Active</a></li>
            <li><a href="#">Item</a></li>
        </ul>

    </div>
    <div class="uk-navbar-right">

        <a class="uk-navbar-toggle" href="#modal-full" uk-search-icon uk-toggle></a>

    </div>
</nav>

<div id="modal-full" class="uk-modal-full uk-modal" uk-modal>
    <div class="uk-modal-dialog uk-flex uk-flex-center uk-flex-middle" uk-height-viewport>
        <button class="uk-modal-close-full" type="button" uk-close></button>
        <form class="uk-search uk-search-large">
            <input class="uk-search-input uk-text-center" type="search" placeholder="Search..." autofocus>
        </form>
    </div>
</div>