PHP类在加载前组合CSS和js文件


php class to combine css and js files before load

我正在寻找一种方法来结合外部css文件,甚至内联css代码与php,在加载html之前,然后将它们添加到一个外部文件与页面中的所有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 
                        )
                    )
                )
            )
        )
    ;
}

thanks in advance

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

要开始使用gulp,这里是一个好地方。