在我的 View 脚本中,我正在使用 View 助手 inlineScript 添加javascript,并将其回显到模板的页脚中。我现在正尝试使用this solution缩小生成的html。
我的问题是,在我的代码中(因为我是一名优秀的开发人员),我在代码中都包含了内联注释(例如//this is a comment),这也导致以下所有代码也被视为注释(因为删除了所有新行并将以下代码放入与内嵌注释在同一行)。
如何扩展inlineScript以删除注释和/或使用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()) ?>
哪个要检查的评论之前没有任何内容。这就引出了我在代码的末尾加上注释的问题:
var $el = jQuery('table.hover') //only apply effect to hover tables
产生与原始问题相同的不良结果。

最佳答案

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

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

1个步骤: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 helper方法
$jsCodeWithoutComments = removeComments($jsCodeWithComments);
$this->inlineScript()->appendScript($jsCodeWithoutComments);

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

这就对了。

10-02 18:22