如何防止UglifyJS在WebPack处理时丢弃未使用的函数?

时间:2017-09-14 14:18:04

标签: webpack minify uglifyjs

我有一个相当小的脚本来控制模态中的旋转木马。要启动模态,我有一个简单的showModal()函数,当单击页面上的图像时会调用该函数。 但是,当WebPack处理JS文件时,UglifyJS会剥离此函数。以下是代码的简化概述:

$('#iconified').on('keyup', function() {
var input = $(this);
input.addClass('empty');
});

var carouselVideoPlayer = (function() {
var initialized = false;
var videoCarousel;

function initCarousel() {
    videoCarousel.carousel({
        interval: false
    });
}

return {
    init: function() {
        initCarousel();
        initialized = true;
    }
  };
})();

function showModal(slideNumber) {
  $('#myModal0').modal('show');
  carouselVideoPlayer.showSlide(slideNumber);
}

jQuery(document).ready(function($) {
  var thumbnails = [];
  for (var i = 0; i < 4; i++) {
    thumbnails.push($('#carousel-selector-' + i));
  }
  carouselVideoPlayer.init();
});

我尝试使用保留showModal的mangle选项,我尝试在函数前面使用/*@__PURE__*/注释。如果没有对此函数进行虚拟调用,我只想将其标记为需要或忽略,以便UglifyJS不会将其删除,并且似乎无法找到一种简单的方法来执行此操作。

更新 虽然不是我所希望的,但以下将阻止UglifyJS剥离该功能。 向showModal()添加了一个if语句,并在我的initialize方法中调用它,传入-1。

function showModal(slideNumber) {
  if (slideNumber !== -1) {
    $('#myModal0').modal('show');
    carouselVideoPlayer.showSlide(slideNumber);
  }
}

1 个答案:

答案 0 :(得分:0)

我不熟悉如何配置Web Pack,但将未使用的标志设置为false作为Uglify压缩选项的一部分可能会解决此问题。

请参阅此处的压缩选项文档: https://github.com/mishoo/UglifyJS2#compress-options

您的解决方法将函数转换为正在使用的函数,因此在上述更改后它不会被删除。