在我的视图脚本中,我使用视图助手inlineScript添加javascript,并在模板的页脚中回显它。现在,我正在尝试使用这个解决方案缩小生成的html。
我的问题是,我在代码中包括了内联注释(例如//this is a comment) (因为我是一名优秀的开发人员),这使得后面的所有代码也被视为注释(因为所有新行都被删除,下面的代码与内联注释放在同一行)。
如何扩展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它产生与原始问题相同的不良结果。
发布于 2018-07-05 15:49:27
您可以添加https://github.com/mrclay/jsmin-php以删除注释和空白(请参见有关注释的问题https://github.com/mrclay/minify/issues/581 )。
如果您使用的是composer项目,那么下一步可以将jsmin-php添加到您的项目中:
1步骤:在您的composer.json所在的终端上运行composer require mrclay/jsmin-php以安装包。
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;语句。
在您的示例中,如果removeComments($this->inlineScript()) ()确实为您返回字符串,则将其称为inlineScript()。请注意,通常应该像下面这样调用inlineScript助手方法
$jsCodeWithoutComments = removeComments($jsCodeWithComments);
$this->inlineScript()->appendScript($jsCodeWithoutComments);请参阅从子视图将Javascript文件追加到InlineScript集合的末尾
就是这样。
https://stackoverflow.com/questions/50507016
复制相似问题