php类在加载之前组合css和js文件

时间:2016-10-20 13:34:49

标签: javascript php html css minify

我正在寻找一种在加载html之前将外部css文件,甚至内联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 
                        )
                    )
                )
            )
        )
    ;
}

提前致谢

1 个答案:

答案 0 :(得分:1)

使用Gulp可以更有效地实现您想要的效果。查看gulp-clean-css缩小css,gulp-uglify缩小js。

开始使用gulp here是个好地方。