缩小内联脚本
Minify InlineScript
在我的视图脚本中,我正在使用视图助手 inlineScript
and echoing it in the footer of my template. I am now attempting to minify the generated html using this solution 添加 javascript。
我的问题是我在我的代码中包含内联注释(例如 //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 to remove comments and whitespaces (see issue 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;
语句。
在你的情况下,你会像 removeComments($this->inlineScript())
那样称呼它,如果 inlineScript() 确实对你来说是 returns 字符串。作为备注,通常 inlineScript
辅助方法应该这样调用
$jsCodeWithoutComments = removeComments($jsCodeWithComments);
$this->inlineScript()->appendScript($jsCodeWithoutComments);
见Append Javascript File to the end of the InlineScript Collection from child view
就是这样。
在我的视图脚本中,我正在使用视图助手 inlineScript
and echoing it in the footer of my template. I am now attempting to minify the generated html using this solution 添加 javascript。
我的问题是我在我的代码中包含内联注释(例如 //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 to remove comments and whitespaces (see issue 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;
语句。
在你的情况下,你会像 removeComments($this->inlineScript())
那样称呼它,如果 inlineScript() 确实对你来说是 returns 字符串。作为备注,通常 inlineScript
辅助方法应该这样调用
$jsCodeWithoutComments = removeComments($jsCodeWithComments);
$this->inlineScript()->appendScript($jsCodeWithoutComments);
见Append Javascript File to the end of the InlineScript Collection from child view
就是这样。