【问题标题】:Minify InlineScript缩小内联脚本
【发布时间】:2018-05-24 10:29:12
【问题描述】:

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

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

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

我尝试过的是:

<?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()) ?>

检查 cmets 之前没有任何内容。这引发了我在行尾有代码后跟注释的问题:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    如果你正在使用 composer 项目,你可以将jsmin-php 添加到你的项目中:

    1步:在你的composer.json所在的终端运行composer require mrclay/jsmin-php来安装包。

    2 步:将带有JSMin::minify 的行添加到脚本缩小功能的实现中,这将删除 cmets:

    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-&gt;inlineScript()) 一样调用它。如前所述,通常应该像这样调用inlineScript 辅助方法

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

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

    就是这样。

    【讨论】:

    • 正确。在我的布局中,我的最终代码是&lt;?php echo \JSMin::minify($this-&gt;inlineScript()-&gt;toString()) ?&gt;
    猜你喜欢
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多