在我的 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
这就对了。