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

标签 javascript php html css minify

我正在寻找一种方法来组合外部 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/

相关文章:

javascript - 没有为 res Node 定义错误函数

javascript - 绑定(bind) sap.m.RadioButton

php - SELECT 是同步的还是异步的?

php - 转换变量来编写 CSS

php - 测试定期付款( Paypal IPN)

html - Bootstrap 表单组的响应式使用

javascript - 获取错误 "Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "完成()"is called;"

javascript - 当我创建新员工时,下拉列表不会加载数据,但是当刷新页面时,它会加载新数据

javascript - JS 不在 pc 上工作,但在 JSFIddle 上工作

javascript - HTML5 Web Worker 不响应消息