缩小InlineScript

时间:2018-05-24 10:29:12

标签: javascript php zend-framework2 minify view-helpers

在我的视图脚本中,我使用视图助手inlineScript添加javascript并在模板的页脚中回显它。我现在正试图使用​​this solution缩小生成的html。

我的问题是我在整个代码中包含内联注释(例如//this is a comment)(因为我是一名优秀的开发人员),这导致所有后续代码也被视为注释(因为所有新行都被删除)并将以下代码放在与内联注释相同的行上。

如何使用mrclay minify扩展inlineScript以删除评论和/或缩小代码?

我尝试的是:

<?php echo preg_replace('#//.*#', '', $this->inlineScript()) ?>

这导致我有代码的网页出现问题,例如:

jQuery(el).attr('data-toggle', 'popover')
    .attr('data-trigger', 'hover')
    .attr('data-html', 'true')
    .attr('data-content', [
        '<img style="height: 75px; border: 1px solid #000; margin: 5px" src="',
        '//' + location.hostname + '/img/broker-logo/' + el.value,
        '"/>'
    ].join(''))

并且,以上的变体,

<?php echo preg_replace('#[\s\t]+//.*#', '', $this->inlineScript()) ?>

对哪些评论进行检查,之前没有任何内容。这引发了一些问题,我在代码后面跟着一行注释:

var $el = jQuery('table.hover') //only apply effect to hover tables

产生与原始问题相同的不良结果。

1 个答案:

答案 0 :(得分:3)

您可以添加https://github.com/mrclay/jsmin-php来删除注释和空格(有关注释,请参见问题https://github.com/mrclay/minify/issues/581)。

如果您正在使用composer项目,则可以通过以下方式将jsmin-php添加到项目中:

第一步:composer require mrclay/jsmin-php所在的终端中运行composer.json,以安装软件包。

第2步:在脚本最小化功能的实现中添加带有JSMin::minify的行,该行将删除注释:

function removeComments(string $code) {
  // $code is variable that contains JS with comments, could be something like
  // $code = 'var someCode = "blah-blah";/**comment*/';

  $minifiedJs = JSMin::minify($code);

  return $minifiedJs;
}

3个步骤:不要忘记在您的.php文件顶部添加use JSMin\JSMin;语句。

在您的情况下,如果inlineScript()确实为您返回了字符串,则您将像removeComments($this->inlineScript())那样调用它。请注意,通常应这样调用inlineScript辅助方法

$jsCodeWithoutComments = removeComments($jsCodeWithComments);
$this->inlineScript()->appendScript($jsCodeWithoutComments);

请参见Append Javascript File to the end of the InlineScript Collection from child view

就是这样。