有人会建议我有关JS缩小的问题吗?我尝试创建它,但是没有成功。我们将在示例中向您显示:https://code.jquery.com/jquery-3.3.1.js
我想要
我已经尝试了许多来自Internet的示例,这始终是一个错误。我什至没有发现任何缩小器都做到了没有错误,所以我想编写一个简单的缩小器。我不想使用任何插件。我只想要一个干净的正则表达式。
您能否尝试尽可能缩小此示例?无论是空格,评论还是其他改进或诡计?
到目前为止,我已经拥有了,它也不起作用
'(\/\/[^\n\]*[\n\r]+)' => ''
'/\/\*[\s\S]*?\*\//' => ''
'#[\r\n]+#' => ''
'/ {2,}/' => ''
答案 0 :(得分:0)
好吧,如果要使用正则表达式,则需要多个表达式:
多行注释
单行注释:
空白:
PHP
中(显然,不必冗长地命名您的键):
<?php
$url = "https://code.jquery.com/jquery-3.3.1.js";
$data = file_get_contents($url);
$expressions = array(
'MULTILINE_COMMENT' => '\Q/*\E[\s\S]+?\Q*/\E',
'SINGLELINE_COMMENT' => '(?:http|ftp)s?://(*SKIP)(*FAIL)|//.+',
'WHITESPACE' => '^\s+|\R\s*'
);
foreach ($expressions as $key => $expr) {
$data = preg_replace('~'.$expr.'~m', '', $data);
}
echo $data;
?>
答案 1 :(得分:0)
这可能不是理想的答案,但是小型服务器会实时缩小。设置并自动自动提供绿色锁定https也非常容易。
示例Caddyfile,具有cors,最小化,日志记录,gzip压缩,通过php进行。
mysite.com {
root ./mysitefolder/
gzip
log ../mysite.log
minify /
cors
fastcgi / /var/run/php/php7.2-fpm.sock {
ext .php
split.php
index index.php
}
}
答案 2 :(得分:-1)
这是一个PHP示例,它清除注释并将它们全部放在一行中。
<?php
$str = <<<EOT
/*
* Simple javascript function
* that writes a square of slashes
*/
function writeSlashes(rows, columns) {
for (row = 1; row < rows; row++ )
{
// The columns
for ( col = 1; col < columns; col++ ) {
s = (Math.floor((Math.random() * 2) % 2)) ? "╱" : "╲"; //Randomizing it
document.write(s);
}
document.writeln("<br>");
}
}
document.body.innerHTML = "";
document.writeln('<br/><a href="http://www.foo.bar?test"> foo.bar </a><br/><br/>');
writeSlashes(20,20);
EOT;
$re1 = '@
(\/\*[\s\S]*?\*\/\s*) # slash-star comments
| (\s+//.*$) # whitespaces before forward slashes till end of line
| (^\s+) # whitespaces at the start of a line
| (?<=[),;:?{}\[\]=<>*%+\-])(\s+) # whitespaces after specific characters
| (\s+)(?=[(,;:?{}\[\]=<>*%+\-]) # whitespaces before specific characters
| [\r\n]+(?!\w) # next line characters not followed by a word character
@mx';
$result = preg_replace($re1, '', $str);
# remaining multiple whitespaces or next line character to one space
$re2 = '/\s{2,}|[\r\n]+/';
$result = preg_replace($re2,' ', $result);
echo htmlentities($result);
结果:
function writeSlashes(rows,columns){for(row=1;row<rows;row++){for( col=1;col<columns;col++){s=(Math.floor((Math.random()*2)%2))?"╱":"╲";document.write(s);}document.writeln("<br>");}}document.body.innerHTML="";document.writeln('<br/><a href="http://www.foo.bar?test">foo.bar</a><br/><br/>');writeSlashes(20,20);
但是这种方法无法与真正的minify lib相提并论,后者可以将长变量名和函数名替换为短名。