Ответы пользователя по тегу Laravel
  • Как вставлять критически css в Laravel?

    @svm
    У меня реализовано такое через webpack.

    В webpack.config.js

    const css = {
        name: 'css',
        mode: "production",
        entry: {
            global:     './resources/css/global.js',
        },
        output: {
            path: path.resolve(__dirname, 'public/assets'),
            filename: '[name].[contenthash].js',
        },
        module: {
            rules: [
                {
                    test: /\.scss$/,
                    use: [
                        MiniCssExtractPlugin.loader,
                        'css-loader',
                        'postcss-loader',
                        'sass-loader'
                    ]
    
                }
            ]
        },
        plugins: [
            new MiniCssExtractPlugin({
                filename: '[name].[contenthash].css'
            }),
            new CleanWebpackPlugin(),
            new HtmlWebpackPlugin({
                template: "resources/css/template_inline_css.ejs",
                filename: path.resolve(__dirname, 'resources/views/inline/css.blade.php'),
                inject: false,
                publicPath: '/assets',
            }),
        ],
    }


    В template_inline_css.ejs
    <% let styles = htmlWebpackPlugin.files.css; %>
    
    <% for (let style of styles) { %>
        @push('<%= style.replace(/\/.+\/(.+?)\..+/, '$1') %>_css')
            <style><%= compilation.assets[style.substr(htmlWebpackPlugin.files.publicPath.length)].source() %></style>
        @endpush
    <% } %>


    Затем можно подключить это в любом blade шаблоне
    @include('inline.css')
    @stack('global_css')

    Краткая суть работы такая:
    webpack скачала преобразует css код, потом MiniCssExtractPlugin его извлекает, затем HtmlWebpackPlugin его вставляет туда, куда ему сказано в переданных параметрах и по заданному шаблону ejs.
    При желании подключение в blade через push можно убрать в шаблоне template_inline_css.ejs. Я это для себя делал, так как нужна была универсальность, чтобы можно было сделать несколько точек входа.

    Как итог: все работает автоматически, хоть и сложно устроено.
    Ответ написан