我正在寻找一种方法来组合外部 css 文件,甚至在加载 html 之前将 css 代码与 php
内联,然后将它们添加到页面中包含所有 css 代码的外部文件中。
我也想为 js
文件添加这个功能。
目前我有一个 minify html 函数,它从 html 中删除空格和新行。
function _minify_html($input) {
return preg_replace_callback('#<\s*([^\/\s]+)\s*(?:>|(\s[^<>]+?)\s*>)#', function($m) {
if(isset($m[2])) {
return '<' . $m[1] . preg_replace(
array(
// From `defer="defer"`, `defer='defer'`, `defer="true"`, `defer='true'`, `defer=""` and `defer=''` to `defer` [^1]
'#\s(checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped)(?:=([\'"]?)(?:true|\1)?\2)#i',
// Remove extra white-space(s) between HTML attribute(s) [^2]
'#\s*([^\s=]+?)(=(?:\S+|([\'"]?).*?\3)|$)#',
// From `<img />` to `<img/>` [^3]
'#\s+\/$#'
),
array(
// [^1]
' $1',
// [^2]
' $1$2',
// [^3]
'/'
),
str_replace("\n", ' ', $m[2])) . '>';
}
return '<' . $m[1] . '>';
}, $input);
}
function minifyHtml($buffer) {
$buffer = _minify_html($buffer);
return
// remove ws outside of all elements
preg_replace( '/>(?:\s\s*)?([^<]+)(?:\s\s*)?</s', '>$1<',
// remove ws around all elems excepting script|style|pre|textarea elems
preg_replace(
'/\s+(<\\/?(?!script|style|pre|textarea)\b[^>]*>)/i', '$1',
// trim line start
preg_replace( '/^\s\s*/m', '',
// trim line end
preg_replace( '/\s\s*$/m', '',
// remove HTML comments (not containing IE conditional comments)
preg_replace_callback(
'/<!--[^ShowThitComment]([\s\S]*?)-->/',
function( $m ) {
return ( 0 === strpos($m[1], '[' ) || false !== strpos( $m[1], '<![' ) ) ? $m[0] : '';
},
// start point
$buffer
)
)
)
)
)
;
}
提前致谢
最佳答案
您可以使用 Gulp 更高效地实现您的目标。看gulp-clean-css用于缩小 css 和 gulp-uglify用于缩小 js。
开始使用 gulp here是个好地方。
关于javascript - php 类在加载前组合 css 和 js 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40156010/